如何唤醒暂停的线程?

How can I wake up paused thread?

如何仅使用 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() 函数将 return 处理任何可以捕获的信号,但您必须先设置信号处理程序并捕获该信号。

这是一个例子:

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 can be caught, but it is not designed for this, but instead to resume processes that where stopped by SIGSTOP.