gpt4 book ai didi

c++ - usleep 是否创建线程取消点?

转载 作者:太空狗 更新时间:2023-10-29 23:47:55 28 4
gpt4 key购买 nike

根据Linux联机帮助页,只有以下函数是线程取消点:pthread_join、pthread_cond_wait、pthread_cond_timedwait、pthread_testcancel、sem_wait、sigwait。在我的测试程序中,线程在 usleep 时退出。线程函数:

void* ThreadFunction(void* arg){    int n = 0;    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);    pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);    for(;;)    {        ostringstream s;        s << "Thread iteration " << n++;        PrintLine(s.str().c_str());        usleep(500000);        PrintLine("Check whether thread canceled...");        pthread_testcancel();        PrintLine("Thread is not canceled - continue");    }    pthread_exit(NULL);}

当主函数执行 pthread_cancel 时,我预计 ThreadFunction 打印的最后一行是“检查线程是否取消...”。但是,它总是在退出前打印“Thread iteration ...”。这意味着,usleep 是取消点。我认为这是正确的——任何 sleep 功能都必须是可取消的。但这没有写在文档中。

如果 usleep 行被注释,最后一个线程输出行是“检查线程是否被取消...”,如我所料。

最佳答案

POSIX 规范中提供了取消点和可选取消点的完整列表:

http://opengroup.org/onlinepubs/007908775/xsh/threads.html

usleep()是强制取消点

关于c++ - usleep 是否创建线程取消点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3256198/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com