线程控制

来源:互联网 发布:如何破解php源码 编辑:程序博客网 时间:2024/05/16 19:52

       1.线程简介:一个进程的地址空间中执行着多个线程。同一个进程的多个线程共享着同一地址空间,因此代码和数据都是共享的,若定义一个函数,在各线程中都可以调用,若定义一个全局变量,在各线程中都可以访问到。

   线程有自己共享的资源,也有自己私有的资源;

   线程共享资源:文件描述符表、每种信号的处理方式(SIG_IGN或自定义的信号处理函数)、当前工作目录、用户id和组id

   线程私有资源:上下文信息(包括各种寄存器的值、程序计数器和栈指针)、栈空间、线程id、调度优先级、信号屏蔽字

   对线程和进程的几点说明:

  (1)线程是调度的基本单位

  (2)linux下的进程称为轻量级进程

  (3)linux下无真正意义上的线程,其线程用进程模拟实现;

   线程与进程的区别及联系

   联系:进程和线程都是由操作系统所提供的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性

区别:(1)线程的划分尺度小于进程,使得多线程程序的并发性高;(2)进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率;(3)从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行,操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配,而是将其看做一个独立的进程;

2.线程控制:包括创建线程、终止线程和线程等待;使用第三方库,遵循POSIX标准;

创建线程:

线程等待:

(1)多线程情况下,任何一个线程异常退出,均导致当前进程异常退出,无意义;(2)对于线程等待,我们关心线程正常退出,结果正确或线程正常退出,结果不正确这两个研究方向;(3)调用线程等待函数pthread_join()函数,均为阻塞式等待

程序代码如下:


测试结果:


终止线程:实现线程终止,有三种方法:(1)使用pthread_exit()函数,可终止线程,不影响进程的运行,注意:若在线程中调用exit()函数,则会终止进程的执行(原因:进程终止后,会回收所有的资源,会导致未被终止的线程终止,禁用exit()终止线程);(2)调用pthread_cancel()函数,可取消线程的执行,线程可被主线程取消,也可自己取消自己,若取消成功,则会返回常数-1(查看可得:#define PTHREAD_CANCELED ((void*)-1));(3)使用 return (void*)退出码 这种方式终止线程;

程序代码如下:


测试:


程序代码如下:


测试:


对于以上线程控制有如下几点说明:

(1)多进程彼此独立执行,其稳定性强于多线程;

(2)在进行线程终止时,切记:不要使用exit终止线程;若想要终止进程,可在线程中调用exit函数;

(3)有三种方式可进行线程终止;

(4)线程等待均为阻塞式等待;







    

原创粉丝点击