linux下发信号通知线程启动工作
时间: 2023-08-04 21:05:30 浏览: 96
在Linux下,我们可以使用信号通知线程开始工作。具体来说,我们可以使用pthread_kill函数向线程发送信号,然后在线程中使用sigwait函数等待该信号的到来。当线程收到信号后,就可以开始执行相应的工作。
下面是一个简单的例子,展示了如何使用信号通知线程开始工作:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <signal.h>
void *work_thread(void *arg) {
sigset_t *set = (sigset_t *)arg;
// 等待信号到来
int sig;
sigwait(set, &sig);
// 开始执行工作
printf("Thread start working\n");
return NULL;
}
int main() {
pthread_t tid;
sigset_t set;
// 阻塞 SIGUSR1 信号
sigemptyset(&set);
sigaddset(&set, SIGUSR1);
pthread_sigmask(SIG_BLOCK, &set, NULL);
// 创建线程并等待信号
pthread_create(&tid, NULL, work_thread, &set);
// 等待一段时间后向线程发送信号
sleep(1);
pthread_kill(tid, SIGUSR1);
// 等待线程结束
pthread_join(tid, NULL);
return 0;
}
```
在上面的例子中,主线程创建了一个新线程并阻塞了 SIGUSR1 信号。新线程使用 sigwait 函数等待 SIGUSR1 信号的到来。主线程等待一段时间后向新线程发送 SIGUSR1 信号,新线程接收到信号后开始执行工作。最后,主线程等待新线程结束并退出。
需要注意的是,在多线程编程中,向整个进程发送信号可能会影响到所有线程,因此建议使用pthread_kill函数向特定线程发送信号。
阅读全文