如何仅使用signal()或pthread_kill()唤醒暂停的线程?
我认为暂停的线程必须收到某种信号才能激活,但是我不知道必须向暂停的线程发送什么信号。
//我的终端USER32@myLaptop:~/list$ gcc -o ./temp ./temp.c -lpthread
USER32@myLaptop:~/list$ ./temp
Starting Thread...
//我的代码
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <signal.h>
pthread_t tid;
void *thread_function(void *data){
tid = pthread_self();
write(STDOUT_FILENO, "Starting Thread...\n", sizeof("Starting Thread...\n"));
pause();
write(STDOUT_FILENO, "Success!\n", sizeof("Success!\n"));
}
int main(){
pthread_t pth;
pthread_create(&pth, NULL, &thread_function, NULL);
sleep(1);
pthread_kill(tid, SIGCONT);
pthread_join(pth, NULL);
return 0;
}
最佳答案
pause()
函数将返回任何可以捕获的信号,但是您必须先设置一个信号处理程序并捕获该信号。
这是一个例子:
void signal_handler(int sig) {
printf("Caught signal %d\n", sig);
}
void *thread_function(void *data) {
signal(SIGUSR1, signal_handler);
//rest of your code here
}
int main() {
...
sleep(1);
pthread_kill(tid, SIGUSR1);
...
}
SIGUSR1
是保留供应用程序内部使用的信号之一,因此适用于这种情况。可以捕获
SIGCONT
,但这不是为此目的而设计的,而是恢复由SIGSTOP
停止的进程。