使用pthread创建两个一样的死循环线程,在线程外通过id号让一个线程挂起与恢复
时间: 2024-05-16 13:16:29 浏览: 62
可以使用pthread库中的pthread_create()函数来创建线程,使用pthread_join()函数等待线程结束。使用pthread_kill()函数发送信号给线程,使用pthread_sigmask()函数来屏蔽信号。下面是一个示例代码:
```c
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void *thread_func(void *arg)
{
int id = *((int *)arg);
while (1) {
printf("Thread %d is running\n", id);
sleep(1);
}
return NULL;
}
int main()
{
pthread_t thread1, thread2;
int id1 = 1, id2 = 2;
// 创建线程
pthread_create(&thread1, NULL, thread_func, (void *)&id1);
pthread_create(&thread2, NULL, thread_func, (void *)&id2);
// 挂起线程1
printf("Suspend Thread 1\n");
pthread_kill(thread1, SIGSTOP);
sleep(5);
// 恢复线程1
printf("Resume Thread 1\n");
pthread_kill(thread1, SIGCONT);
// 等待线程结束
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
return 0;
}
```
在上面的代码中,我们首先定义了一个线程函数thread_func,在其中使用死循环不断输出线程的id和运行状态。在主函数中,我们使用pthread_create()函数创建了两个线程,并传入了不同的id号。
然后,我们通过pthread_kill()函数向线程发送信号,使用SIGSTOP信号挂起线程1,使用SIGCONT信号恢复线程1。在主函数中,我们使用sleep()函数等待5秒钟,以便在屏幕上能够观察到线程1的挂起和恢复。
最后,我们使用pthread_join()函数等待两个线程结束,防止主函数提前退出。
阅读全文