用C代码举一个二值信号量的例子
时间: 2023-06-02 12:01:32 浏览: 56
以下是一个使用二值信号量的示例,其中一个线程等待另一个线程完成:
```c
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
// 定义二值信号量
sem_t sem;
// 线程函数
void *thread_func(void *arg) {
printf("Thread started.\n");
// 做一些工作...
// 释放信号量,表示完成
sem_post(&sem);
printf("Thread finished.\n");
return NULL;
}
int main() {
pthread_t thread;
// 初始化信号量,初始值为0
sem_init(&sem, 0, 0);
// 创建线程
pthread_create(&thread, NULL, thread_func, NULL);
printf("Main thread waiting...\n");
// 等待信号量,即等待线程完成
sem_wait(&sem);
printf("Main thread finished waiting.\n");
// 销毁信号量
sem_destroy(&sem);
return 0;
}
```
在这个例子中,主线程等待线程完成,使用了二值信号量来进行同步。线程中做一些工作后释放信号量,表示完成,主线程等待信号量,即等待线程完成。
相关推荐
![](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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)