线程相关函数(7)-sem_post(), sem_wait() 信号量
sem_t
sem_init
sem_wait
sem_trywait
sem_timedwait
sem_post
sem_destroy
生产者消费者实例:
#include <stdlib.h> #include <pthread.h> #include <stdio.h> #include <semaphore.h>
#define NUM 5 int queue[NUM]; sem_t blank_number, product_number;
void *producer(void *arg) { int p = 0; while (1) { sem_wait(&blank_number); queue[p] = rand() % 1000 + 1; printf("Produce %d\n", queue[p]); sem_post(&product_number); p = (p+1)%NUM; sleep(rand()%5); }
}
void *consumer(void *arg) { int c = 0; while (1) { sem_wait(&product_number); printf("Consume %d\n", queue[c]); queue[c] = 0; sem_post(&blank_number); c = (c+1)%NUM; sleep(rand()%5); } }
int main(int argc, char *argv[]) { pthread_t pid, cid; sem_init(&blank_number, 0, NUM); sem_init(&product_number, 0, 0); pthread_create(&pid, NULL, producer, NULL); pthread_create(&cid, NULL, consumer, NULL); pthread_join(pid, NULL); pthread_join(cid, NULL); sem_destroy(&blank_number); sem_destroy(&product_number); return 0; }