【发布时间】:2013-05-09 14:56:49
【问题描述】:
我的设置有点像这样:
void* work(void*) { while (true) {/*do work*/} return 0;}
class WorkDoer
{
private:
pthread_t id;
public:
WorkDoer() { pthread_create(&id, NULL, work, (void*)this); }
void Shutdown() { pthread_join(id, NULL); /*other cleanup*/ }
}
在某些情况下,Shutdown() 是从主线程调用的,而在其他一些情况下,我想从线程本身调用 shutdown(之后立即从该线程返回)。
pthread_join() 的文档说,如果调用线程与传递的线程相同,它将返回 EDEADLK。
我的问题是:这样做可以吗?如果可以,是否安全? (因此忽略连接失败,因为无论如何我都会很好地结束线程?)或者,这是应该避免的事情吗?
【问题讨论】:
标签: c++ thread-safety pthreads