终止一个被阻塞的pthreads线程

Terminating a blocked pthreads thread

本文关键字:pthreads 线程 一个 终止      更新时间:2023-10-16

我有一个线程从文件描述符中读取数据,使用select()阻塞直到数据可用。当程序需要终止时,我需要关闭线程,但是它在select时被阻塞。

我的问题是,通过关闭文件描述符来通知线程我想终止的意图是一个好的做法吗?

是否有更好的方法来通知线程?我知道总是有一个选择使用信号,但是我在一些地方读到信号pthreads不能很好地协同工作。

您可以使用管道,并将其添加到您的读取集。当线程应该终止时,在管道上发送一个字节。

或者设置select呼叫超时,超时时检查是否有终止标志

除了由Joachim提出的温和方法之外,还有一些粗糙的方法来"interrupt"阻塞select():

  • 使用pthread_kill()向阻塞线程发送信号,并在select()之后测试(EINTR == errno)
  • 调用pthread_cancel()线程id。select()属于默认取消点集合