终止一个被阻塞的pthreads线程
Terminating a blocked pthreads thread
我有一个线程从文件描述符中读取数据,使用select()
阻塞直到数据可用。当程序需要终止时,我需要关闭线程,但是它在select时被阻塞。
我的问题是,通过关闭文件描述符来通知线程我想终止的意图是一个好的做法吗?
是否有更好的方法来通知线程?我知道总是有一个选择使用信号,但是我在一些地方读到信号pthreads
不能很好地协同工作。
您可以使用管道,并将其添加到您的读取集。当线程应该终止时,在管道上发送一个字节。
或者设置select
呼叫超时,超时时检查是否有终止标志
除了由Joachim提出的温和方法之外,还有一些粗糙的方法来"interrupt"阻塞select()
:
- 使用
pthread_kill()
向阻塞线程发送信号,并在select()
之后测试(EINTR == errno)
- 调用
pthread_cancel()
线程id。select()
属于默认取消点集合
相关文章:
- 如何使用 pthreads 以正确的方式设置两个线程之一的优先级
- C++,pthreads:如何从多个线程停止工作线程
- 如何在 pthreads 中正确同步线程
- pthreads 多线程矩阵乘法
- 如何使用pthreads在Solaris上增加C 线程堆栈的大小
- 使用pthreads实现线程池
- 使用pthreads时的后台线程(不错,优先级)
- 如何使用pthreads使多线程正常工作,而不是使用C++在类中提升
- 提高线程池(C++,pthreads)的性能
- pthreads:快速重新锁定导致的线程不足
- 如何在Mac操作系统上设置线程优先级pthreads
- pthreads如何创建许多线程
- 在g++中是使用pthreads作为后台的C++11线程模型
- 在 C++ 中使用 pthreads 实现线程池
- 使用pthreads(在C++中)将数据传递给线程
- Win32/pthreads线程函数上的volatile正确性
- 读取线程应用程序(linux,pthreads)中的文件大小时出错
- 你需要加入取消的线程吗?(pthreads)
- 如何使用pthreads以智能的方式向线程共享变量
- 终止一个被阻塞的pthreads线程