嵌入式编程:使用信号量控制A、B两个程序同步交替运行,即B运行2秒、A运行2秒、B运行2秒…… ,循环10次后两个程序结束运行。
时间: 2023-12-16 16:03:34 浏览: 107
嵌入式编程
这个问题可以通过使用信号量来解决。下面是一个基于 POSIX 信号量的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>
#define NUM_LOOPS 10
// 两个线程共享的信号量
sem_t sem;
// 线程 A 的代码
void* threadA(void* arg) {
for (int i = 0; i < NUM_LOOPS; i++) {
// 等待信号量,如果信号量的值为 0,则阻塞
sem_wait(&sem);
printf("Thread A running...\n");
// 睡眠 2 秒钟模拟运行
sleep(2);
// 发送信号给线程 B
sem_post(&sem);
}
return NULL;
}
// 线程 B 的代码
void* threadB(void* arg) {
for (int i = 0; i < NUM_LOOPS; i++) {
// 等待信号量,如果信号量的值为 0,则阻塞
sem_wait(&sem);
printf("Thread B running...\n");
// 睡眠 2 秒钟模拟运行
sleep(2);
// 发送信号给线程 A
sem_post(&sem);
}
return NULL;
}
int main() {
// 初始化信号量
sem_init(&sem, 0, 1);
// 创建线程 A 和线程 B
pthread_t tidA, tidB;
pthread_create(&tidA, NULL, threadA, NULL);
pthread_create(&tidB, NULL, threadB, NULL);
// 等待两个线程结束
pthread_join(tidA, NULL);
pthread_join(tidB, NULL);
// 销毁信号量
sem_destroy(&sem);
return 0;
}
```
在这个示例代码中,我们创建了两个线程 `threadA` 和 `threadB`,它们共享一个信号量 `sem`。在每次运行之前,线程 A 和线程 B 都会等待信号量,以确保它们交替运行。在每次运行结束后,它们都会释放信号量,通知另一个线程开始运行。在 `main` 函数中,我们等待两个线程结束并销毁信号量。
阅读全文