sem_post与sem_wait的一个简单示例程序
时间: 2023-08-09 09:08:50 浏览: 97
async和await使用简单实例
下面是一个简单的示例程序,其中使用了sem_post和sem_wait来同步两个线程:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
sem_t sem; // 定义信号量
void* thread_func(void* arg) {
int* num = (int*)arg;
printf("Thread %d is waiting...\n", *num);
sem_wait(&sem); // 等待信号量
printf("Thread %d is running!\n", *num);
sem_post(&sem); // 释放信号量
pthread_exit(NULL);
}
int main() {
sem_init(&sem, 0, 1); // 初始化信号量,初始值为1
pthread_t tid[2];
int i, res;
for (i = 0; i < 2; i++) {
res = pthread_create(&tid[i], NULL, thread_func, &i); // 创建线程
if (res != 0) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
}
for (i = 0; i < 2; i++) {
res = pthread_join(tid[i], NULL); // 等待线程结束
if (res != 0) {
perror("Thread join failed");
exit(EXIT_FAILURE);
}
}
sem_destroy(&sem); // 销毁信号量
return 0;
}
```
在该程序中,我们定义了一个名为sem的信号量,并初始化为1。然后创建了两个线程,每个线程都会等待信号量sem,并在获取到信号量后输出自己的编号。由于信号量初始值为1,因此两个线程可以依次执行。在每个线程结束后,都会释放信号量,以供下一个线程获取。最后,我们销毁了信号量sem。
阅读全文