繁体   English   中英

优雅地杀死 C 的 pthread 中的阻塞线程?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM