Ale*_*x F 2 c++ linux pthreads
根据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);
}
当main函数执行pthread_cancel时,我希望ThreadFunction打印的最后一行是"检查线程是否被取消......".但是,它总是在退出之前打印"Thread iteration ...".这意味着,usleep是取消点.我认为这是正确的 - 任何睡眠功能都必须是可取消的.但这不是在文档中写的.
如果usleep line被注释,最后一个线程输出行是"检查线程是否被取消...",正如我所期望的那样.
POSIX规范中提供了取消点和可选取消点的完整列表:
http://opengroup.org/onlinepubs/007908775/xsh/threads.html
usleep() 是强制取消点
| 归档时间: |
|
| 查看次数: |
1780 次 |
| 最近记录: |