嵌入式linux编程:使用信号量控制A、B两个程序同步交替运行,即B运行3秒、A运行3秒、B运行3秒…… ,循环10次后两个程序结束运行。
时间: 2023-11-27 09:55:39 浏览: 96
这个问题可以通过使用信号量来实现。下面是一个可能的解决方案:
A程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/sem.h>
#define SEM_KEY 1234
int main() {
int sem_id = semget(SEM_KEY, 1, 0666 | IPC_CREAT); // 创建信号量集合
if (sem_id == -1) {
perror("semget");
exit(EXIT_FAILURE);
}
int i;
for (i = 0; i < 10; i++) {
struct sembuf sem_op[2] = {
{0, 0, 0}, // 等待信号量值为 0
{0, 1, 0} // 信号量加 1
};
semop(sem_id, sem_op, 2); // 执行两个操作
printf("A is running\n");
sleep(3);
}
semctl(sem_id, 0, IPC_RMID); // 删除信号量集合
return 0;
}
```
B程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/sem.h>
#define SEM_KEY 1234
int main() {
int sem_id = semget(SEM_KEY, 1, 0666 | IPC_CREAT); // 创建信号量集合
if (sem_id == -1) {
perror("semget");
exit(EXIT_FAILURE);
}
int i;
for (i = 0; i < 10; i++) {
printf("B is running\n");
sleep(3);
struct sembuf sem_op = {0, -1, 0}; // 信号量减 1
semop(sem_id, &sem_op, 1); // 执行操作
}
semctl(sem_id, 0, IPC_RMID); // 删除信号量集合
return 0;
}
```
这两个程序都创建了一个信号量集合,使用同一个 key 值。A程序先等待信号量的值为 0,然后输出一行信息并休眠 3 秒。B程序先输出一行信息并休眠 3 秒,然后将信号量的值减 1。这样,就可以实现 A、B 两个程序交替运行了。当循环 10 次后,两个程序都删除了信号量集合。
阅读全文