linux线程的创建、退出、等待、取消、分离

linux线程的创建、退出、等待、取消、分离,第1张

返回值:成功:0,错误:出错编号。

pthread不是Linux系统默认的库而是POSIX线程库。在Linux中将其作为一个库来使用,因此编译时需要加上-pthread以显式链接该库

返回线程ID

线程标识符在进程中是唯一的,即分别属于两不同进程的两个线程可能有相同的线程标识符

retval:返回信息

参数表:

thread: 要等待的线程的pid

retval:用来存储被等待线程的返回值

返回0:成功;返回错误号:失败

主线程阻塞自己,等待子线程结束,然后回收子线程资源

可以设置线程能否被取消和取消后是否立即执行

参数表

state:PTHREAD_CANCEL_DISABLE或者PTHREAD_CANCEL_ENABLE

oldstate:指针类型,上一次取消状态的指针,可设NULL

type:PTHREAD_CANCEL_ASYNCHRONOUS立即取消

PTHREAD_CANCEL_DEFERRED等待事件(如pthread_join时)才取消

在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死,只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 因此为了避免内存泄漏,所有线程的终止,要么已设为DETACHED,要么就需要使用pthread_join()来回收

返回0成功,错误号失败

分离后不可以再合并。该 *** 作不可逆

综合以上要想让子线程总能完整执行(不会中途退出),

注:很多地方参照了黄茹老师主编的《Linux环境高级程序设计》

线程和进程是另一对有意义的概念,主要区别和联系如下:

进程是 *** 作系统进行资源分配的基本单位,拥有完整的进程空间。进行系统资源分配的时候,除了CPU资源之外,不会给线程分配独立的资源,线程所需要的资源需要共享。

线程是进程的一部分,如果没有进行显示的线程分配,可以认为进程是单线程的;如果进程中建立了线程,则可认为系统是多线程的。

多线程和多进程是两种不同的概念。多线程与多进程有不同的资源共享方式。

进程有进程控制块PCB,系统通过PCB对进程进行调度。进程有线程控制块TCP,但TCB所表示的状态比PCB要少的多。

CreateThread、ExitThread和C run time线程函数(需要包含头文件#include <process.h>) 。建议用C run time函数_beginthreadex或者是_beginthread函数创建,比MFC的安全,C运行时库里的函数的线程应该使用_beginthread和_endthread这些C运行时函数来管理线程。

这里稍微区别:

(1):_beginthread函数的线程入口函数必须使用_cdecl调用约定。_beginthreadex函数的线程入口函数必须使用_stdcall调用约定

(2):_endthread将会自动的关闭线程句柄,然而_beginthreadex不会,需要使用CloseHandle现实的关闭句柄。所以_beginthreadex函数可以使用WaitForSingleObject函数来获取线程对象来进行同步。

(3):_endthread将会自动的关闭线程句柄,然而_beginthreadex不会,需要使用CloseHandle现实的关闭句柄。所以_beginthreadex函数可以使用WaitForSingleObject函数来获取线程对象来进行同步。

(4):一个连接Libcmt.lib的可执行文件,不要调用ExitThread函数,这个函数会阻止系统的运行时回收已分配的资源。使用_endthread and _endthreadex可以回收已分配的资源然后再调用ExitThread。

(5):对于使用C运行时库里的函数的线程应该使用_beginthread和_endthread这些C运行时函数来管理线程,而不是使用CreateThread和ExitThread。否则,当调用ExitThread后,可能引发内存泄露。

好像就这些吧!参考一下!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7680763.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-08
下一篇2023-04-08

发表评论

登录后才能评论

评论列表(0条)

    保存