一个posix信号量的例程
时间: 2024-05-02 15:18:20 浏览: 82
下面是一个基本的 POSIX 信号量例程:
```c
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
sem_t sem;
void* thread_func(void* arg) {
sem_wait(&sem); // 等待信号量
printf("Thread %ld: acquired semaphore\n", (long)arg);
sem_post(&sem); // 释放信号量
printf("Thread %ld: released semaphore\n", (long)arg);
return NULL;
}
int main() {
pthread_t threads[5];
sem_init(&sem, 0, 1); // 初始化信号量
for (long i = 0; i < 5; i++) {
pthread_create(&threads[i], NULL, thread_func, (void*)i);
}
for (int i = 0; i < 5; i++) {
pthread_join(threads[i], NULL);
}
sem_destroy(&sem); // 销毁信号量
return 0;
}
```
这个例程创建了五个线程,每个线程都会等待信号量并输出一条消息,然后释放信号量并再次输出一条消息。在这个例程中,信号量的初始值为 1,因此第一个线程会立即获得信号量,其他线程需要等待第一个线程释放信号量之后才能获得它。在所有线程都完成后,信号量被销毁。
阅读全文