作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个线程叫做mainloop
即
int run_mainloop;
void* mainloop(void* param)
{
// local vars
// initialize local vars
while(run_mainloop)
{
// run mainloop
}
return 0;
}
线程从名为client_open
的函数启动,即
int client_open()
{
run_mainloop = 1;
return pthread_create(&thread, NULL, mainloop, NULL);
}
但是,在 mainloop
中,如果初始化局部变量失败,我需要立即通知 client_open
提前退出。
pthread_join
不合适,因为它会阻塞,而我不能让 client_open
阻塞。如果是在返回之前等待一小段时间就可以了。
如果不使用会阻塞的 pthread_join,我怎么能以一种很好的方式做到这一点。我希望能够得到返回码。
最佳答案
使用 pthread_tryjoin_np
是不正确的:新线程可以在 pthread_create
返回和新线程实际执行初始化代码之间任意延迟。
如果您在该延迟期间pthread_tryjoin_np
,连接将失败并且您会认为一切都“正常”,而实际上并非如此。
您想要的是一个条件:client_open
将等待它,并且 mainloop
将向它发出信号(在完成初始化后)。
关于c - 如何在不阻塞太久的情况下检测从 pthread_create 提前退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8705784/
我是一名优秀的程序员,十分优秀!