问:在c语言中,使用pthread_create创建线程。在线程中阻塞函数导致其阻塞的时候,如何退出线程?
答:
线程退出方式:
(1)正常顺序执行完后return;
(2)在线程内部自身调用pthread_exit();
这两种方式都依赖于线程函数自身执行,如果线程遇到阻塞函数被阻塞,则不能继续执行,则无法满足上述条件。
(3)使用pthread_cancel()函数:
该函数在cancle point处能退出线程。并且能够使阻塞的线程跳出阻塞,因此按照如下方式能够退出线程:
pthread_testcancel();
block_function();//该函数为会引起阻塞的函数,并且满足POSIX指定的可以被pthread_cancle发出的cancel信号打破阻塞态的函数,具体可以参照网上
pthread_testcancel();
备注(该备注内容摘抄自互联网:https://blog.csdn.net/slj_win/article/details/7267379):根据POSIX标准,pthread_join()、pthread_testcancel()、pt