gpt4 book ai didi

c - 如何暂停和恢复线程?

转载 作者:可可西里 更新时间:2023-11-01 11:51:21 25 4
gpt4 key购买 nike

我正在尝试编写程序,它将停止并继续线程而不是取消它。我需要知道,我该如何实现?

我想将 pthread_kill() 函数与 SIGSTOP 和 SIGCONT 信号一起用于线程。

#include <pthread.h>
#include <signal.h>
#include <stdio.h>
#include <time.h>



void *threadfunc(){
while(1){
printf("i am thread \n");
sleep(1);
}
}

void main(){
pthread_t thread;
pthread_create(&thread, NULL, threadfunc, NULL);
sleep(2);
pthread_kill(thread, SIGSTOP);
printf("signal sent \n");
sleep(2);
printf("i am main thread \n");
}

我的期望: 程序启动,打印 2 次“我是线程”,pthread_kill 发送信号以停止线程,用户看到“信号已发送”和“我是主线程”。实际结果: 程序启动,打印 2 次“我是线程”,pthread_kill 发送停止信号,程序终止

最佳答案

没有一种正确的方法可以暂停和恢复线程。

首先,如果没有线程正在运行的代码的配合,根本没有办法做到这一点。否则,如果您暂停一个线程,而它持有一个锁,而要恢复它的线程需要在恢复之前获取该锁。因此,您必须与要暂停的线程正在运行的代码合作。

在线程的配合下,你可以为所欲为。您可以拥有线程定期检查的原子 bool。如果线程设计为在没有工作要做时暂停,您就可以不给线程工作。

没有唯一正确的方法,它完全取决于其他设计决策。这主要取决于该代码在做什么以及您要暂停它的原因。

另一件非常重要的事情:任何时候你觉得你需要从外面进入一个线程并让它做某事或不做某事,这应该是一个信号,表明你一开始就把线程编码错了.一个线程应该知道它需要做什么工作以及什么时候不需要通过它自己的设计来做工作。如果其他东西必须侵入性地“介入”并让它做或不做,你应该重新检查让你达到那个点的设计决策。

针对您的具体观点:

I want to use pthread_kill() function with SIGSTOP and SIGCONT signals to thread.

那不可能。如果线程恰好持有需要获取才能从 pthread_kill 返回的内部库锁怎么办?试图暂停它的线程也会暂停自己。无论如何,SIGSTOP 被定义为停止一个进程,而不是一个线程。

关于c - 如何暂停和恢复线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54713131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com