#include <iostream> #include <stdlib.h> #include <pthread.h> #include <semaphore.h> using namespace std; #define NUM 5 #define Count 20 #define ProCount 40 sem_t mutex,full; int amount=0; void *Producer(void *arg) { int i=0; while(i<ProCount) { sem_wait(&mutex); if (amount>=NUM) { cout<<"已满"<<endl; } else { amount++; cout<<"余下:"<<amount<<endl; i++; } sem_post(&full); } } void *Consumer(void *arg) { int i=0; while(i<Count) { sem_wait(&full); if (amount<=0) { cout<<"为空"<<endl; } else { amount--; cout<<"余下:"<<amount<<endl; i++; } sem_post(&mutex); } } int main(int argc, char const *argv[]) { int test=sem_init(&mutex,0,10); test+=sem_init(&full,0,0); if (test!=0) { cout<<"sem error"<<endl; return -1; } pthread_t id[3]; pthread_create(&id[0],NULL,Producer,NULL); pthread_create(&id[1],NULL,Consumer,NULL); pthread_create(&id[2],NULL,Consumer,NULL); pthread_join(id[0],NULL); pthread_join(id[1],NULL); pthread_join(id[2],NULL); sem_destroy(&mutex); sem_destroy(&full); return 0; }