我有一个有点像这样的设置:
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()
从主线程调用,而在其他一些情况下,我想从线程本身调用关闭(之后立即从该线程返回)。
的文档说,如果调用线程与传递的线程相同pthread_join()
,它将返回 a 。EDEADLK
我的问题是:这样做可以吗?如果可以,是否安全?(因此忽略连接失败,因为无论如何我都会很好地结束线程?)或者,这是应该避免的事情吗?