linux使用pthread创建两个一样的死循环线程,在线程外通过id号让其中线程挂起与恢复
时间: 2024-05-04 09:18:32 浏览: 123
linux 多线程编程 pthread
5星 · 资源好评率100%
可以使用pthread库中的pthread_create()函数创建线程,并使用pthread_cancel()函数中止线程。具体的操作流程可以参考以下代码:
```
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void *thread_func(void *arg)
{
int tid = *(int *)arg;
while (1) {
printf("Thread %d is running.\n", tid);
sleep(1);
}
return NULL;
}
int main()
{
pthread_t tid1, tid2;
int id1 = 1, id2 = 2;
pthread_create(&tid1, NULL, thread_func, (void *)&id1);
pthread_create(&tid2, NULL, thread_func, (void *)&id2);
while (1) {
int input;
printf("Enter thread id to suspend/resume (1/2): ");
scanf("%d", &input);
if (input == 1) {
if (pthread_cancel(tid1) == 0) {
printf("Thread 1 suspended.\n");
} else {
printf("Thread 1 not suspended.\n");
}
} else if (input == 2) {
if (pthread_cancel(tid2) == 0) {
printf("Thread 2 suspended.\n");
} else {
printf("Thread 2 not suspended.\n");
}
} else {
printf("Invalid input.\n");
}
}
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
```
在上述代码中,我们使用pthread_create()函数创建了两个线程,并分别传递了线程id作为参数。在主线程中,我们通过scanf()函数获取用户输入的线程id,然后使用pthread_cancel()函数将指定的线程挂起。如果pthread_cancel()函数返回0,则说明线程成功挂起,否则说明线程未能被挂起。注意,因为线程是死循环,所以我们需要使用pthread_join()函数等待线程结束。
阅读全文