多线程设计,每个线程各自打印一个字母,可以交替打印A, B, C字母。
时间: 2024-02-15 10:03:51 浏览: 31
这是一个经典的多线程同步问题,可以通过使用互斥锁和条件变量来实现。下面是一个示例代码,实现三个线程 A, B, C 按照 A -> B -> C 的顺序交替打印字母。
```c
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 互斥锁
pthread_cond_t cond = PTHREAD_COND_INITIALIZER; // 条件变量
int flag = 0; // 控制打印顺序的标志位
// 线程 A 打印字母 A
void *ThreadA(void *arg)
{
while (1) {
pthread_mutex_lock(&mutex);
while (flag != 0) {
pthread_cond_wait(&cond, &mutex);
}
printf("A ");
flag = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
}
// 线程 B 打印字母 B
void *ThreadB(void *arg)
{
while (1) {
pthread_mutex_lock(&mutex);
while (flag != 1) {
pthread_cond_wait(&cond, &mutex);
}
printf("B ");
flag = 2;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
}
// 线程 C 打印字母 C
void *ThreadC(void *arg)
{
while (1) {
pthread_mutex_lock(&mutex);
while (flag != 2) {
pthread_cond_wait(&cond, &mutex);
}
printf("C ");
flag = 0;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
}
int main(void)
{
pthread_t tidA, tidB, tidC;
// 创建三个线程
pthread_create(&tidA, NULL, ThreadA, NULL);
pthread_create(&tidB, NULL, ThreadB, NULL);
pthread_create(&tidC, NULL, ThreadC, NULL);
// 等待线程结束
pthread_join(tidA, NULL);
pthread_join(tidB, NULL);
pthread_join(tidC, NULL);
return 0;
}
```
以上示例代码使用了互斥锁和条件变量来实现线程之间的同步。线程 A, B, C 通过互斥锁来保证同时只有一个线程在执行,通过条件变量来控制打印顺序。当一个线程打印完毕后,它会发送一个信号通知下一个线程开始执行。当线程等待信号时,它会释放互斥锁,以便其他线程可以执行。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)