c - 如果在 linux 中花费的时间超过阈值时间,如何终止子线程

标签 c linux multithreading pthreads

我正在做一件事情,如果它需要超过 10 分钟才能完成,我需要杀死一个子线程。

例如:

void *child_thread();
void parent_thread()
{
    pthread_t tid;
    pthread_create(&tid,NULL,child_thread,NULL);
    **pthread_join_on_wait(tid, NULL,10 mins);**
}

我无法在 Net 上找到任何类似于 join_on_wait 或类似的东西。

是的,我可以使用信号量或条件。但想仔细检查是否有任何通用方法。

最佳答案

如前所述,您必须在父线程中处理计时器。您可以定期检查并同时做其他工作。

如果该线程顺利退出会很好,但这并不总是可能的。例如,您正在调用一些不受信任的第 3 方代码。 Web 浏览器一直都在这样做。

要从另一个线程终止一个线程,您可以向它发送一个信号。 pthread_kill 向特定线程发送信号。

您将需要一个调用 pthread_exit 的信号处理程序来终止该线程。

要记住的一件事是,您在该线程中分配的任何内存都不会被释放,如果您持有任何锁,它们将保持原样。不是什么好事。

我可以告诉你一个更好的方法,但它适用于 c++,而不适用于 c。

关于c - 如果在 linux 中花费的时间超过阈值时间,如何终止子线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35793272/

相关文章:

c - stm32f4板上的usb otg与i2c冲突

c - 在 C 中读入结构数组时只打印 txt 文件的最后一行

c - 当我在C中读取pcap时,如何绕过vlan头?

linux - sudo写入模式错误

java - 在Linux上安装Java 3d

java - Runnables 会阻塞 UI 线程吗?

wpf - WPF中的“Please wait” Windows

c - 调试意外终止的守护进程

linux - 如何在 bash 中拆分字符串

c++ - 在正在运行的线程中处理事件