[英]Kill a blocking thread in C's pthread gracefully?
假设我有一个类似这样的线程:
void my_thread(char *device_name) {
int fd = open(device_name, O_RDONLY);
struct input_event ev;
while(1) {
read(fd, &ev, sizeof(struct input_event));
/* do something */
}
}
如何停止这样的线程? 一种方法是使用pthread_cancel
,但我宁愿做得更优雅。 可能是pthread_kill
之类的东西? 然而,在这种情况下,读取方法是否会解除阻塞(我认为应该如此),线程将如何处理信号? 还是应该处理它的过程?
我将非常感谢您的建议!
对此的答案是不要做任何会在没有超时的情况下阻塞的事情。 对于 IO,您不应该调用 read(),直到您知道调用不会阻塞。 例如,首先在路径上使用 poll() 或 select() 以确定状态。
您的问题实际上是“如何中断来自其他线程的阻塞系统调用”。
尝试搜索它。 这是类似的讨论之一: 关闭阻塞 UDP 套接字的正确方法
你不能优雅地杀死一个线程。 如果要干净退出,请确保线程基于某些条件退出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.