如何优雅地从主线程中阻止pthread退出?

1 c multithreading pthreads blocking

我有一个pthread,它对某些文件描述符进行无限轮询,并带有负超时参数.

从主线程,我希望能够向轮询线程指出它应该退出.

我做了一些研究,发现了以下方法:

  1. 使用pthread_cancel():这是不鼓励的,因为它可能导致意外后果,即不清除任何持有的资源或互斥量

  2. 使用变量作为标志并将其设置在主线程中.轮询线程每次迭代都会检查此标志,如果设置,则通过调用pthread_exit()退出.这种方法不起作用,因为我的轮询线程不循环,而只是无限期地阻塞,等待文件描述符.

任何人都可以建议一个优雅的解决方案吗?

谢谢!ASM

caf*_*caf 5

您可以创建一个匿名管道,pipe(2)并让文件描述符监视线程将读取结束添加到其轮询文件描述符,当该文件描述符报告EOF时退出.然后主线程在它想要线程退出时关闭写端.