创建一个信号量集合,里面包含两个信号量,分别初始化为 0 和1 C语言实现
时间: 2024-09-13 11:08:02 浏览: 39
在C语言中,你可以使用`semaphore.h`库中的`Semaphore`结构体和相应的函数来创建和管理信号量集合。这里是一个简单的例子,展示了如何创建两个信号量,一个初始化为0,另一个为1:
```c
#include <stdio.h>
#include < semaphore.h> // 包含头文件
// 定义信号量
Semaphore sema1 = {0}; // 初始化为0
Semaphore sema2 = {1}; // 初始化为1
// 初始化函数(假设已成功打开)
void init_sema() {
sem_init(&sema1, 0, 0); // 初始化sema1为0
sem_init(&sema2, 0, 1); // 初始化sema2为1
}
// 示例:获取sema1,然后获取sema2
int main() {
int ret;
// 获取sema1,因为初始值为0,这将阻塞直到它变为1
printf("Acquiring semaphore 1...\n");
ret = sem_wait(&sema1);
if (ret != 0) {
perror("Error acquiring semaphore 1");
return -1;
}
// 现在sema1为1,可以尝试获取sema2
printf("Acquiring semaphore 2...\n");
ret = sem_wait(&sema2);
// 如果sema2也为0,此时会阻塞,直到其他进程释放它
if (ret != 0) {
perror("Error acquiring semaphore 2");
return -1;
}
printf("Both semaphores acquired.\n");
// 使用完毕后需要手动释放
sem_post(&sema2); // 先释放sema2
sem_post(&sema1); // 再释放sema1
return 0;
}
阅读全文