Linux让三个线程顺序执行
时间: 2023-10-27 09:16:50 浏览: 113
可以使用线程同步的方法来实现三个线程的顺序执行,比如使用信号量或互斥锁。
具体实现方法如下:
1. 创建三个线程,分别执行任务 A、B、C。
2. 使用信号量或互斥锁来同步三个线程的执行。在任务 A 执行完后,释放信号量或解锁互斥锁,使得任务 B 可以执行;在任务 B 执行完后,同样释放信号量或解锁互斥锁,使得任务 C 可以执行。
3. 在主线程中等待三个子线程全部执行完毕,然后结束程序。
下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
sem_t sem1, sem2;
void *threadA(void *arg) {
printf("Thread A\n");
sem_post(&sem1); // 释放信号量 sem1
pthread_exit(NULL);
}
void *threadB(void *arg) {
sem_wait(&sem1); // 等待信号量 sem1
printf("Thread B\n");
sem_post(&sem2); // 释放信号量 sem2
pthread_exit(NULL);
}
void *threadC(void *arg) {
sem_wait(&sem2); // 等待信号量 sem2
printf("Thread C\n");
pthread_exit(NULL);
}
int main() {
sem_init(&sem1, 0, 0); // 初始化信号量 sem1
sem_init(&sem2, 0, 0); // 初始化信号量 sem2
pthread_t tid1, tid2, tid3;
pthread_create(&tid1, NULL, threadA, NULL);
pthread_create(&tid2, NULL, threadB, NULL);
pthread_create(&tid3, NULL, threadC, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
pthread_join(tid3, NULL);
sem_destroy(&sem1); // 销毁信号量 sem1
sem_destroy(&sem2); // 销毁信号量 sem2
return 0;
}
```
在上面的示例代码中,信号量 sem1 和 sem2 分别用来同步任务 A、B 和任务 B、C 的执行。线程 A 执行完后释放信号量 sem1,线程 B 等待信号量 sem1,线程 B 执行完后释放信号量 sem2,线程 C 等待信号量 sem2。最后,主线程等待三个子线程执行完毕后才结束程序。
阅读全文