#include <semaphore.h>
sem_t blank,xfull;
#define __SEM_CNT__ 5
int queue[__SEM_CNT__];
int beginnum = 100;
? void * thr_producter(void *arg)
{
int i = 0;
while(1)
{
sem_wait(&blank);//申请资源 blank--
printf("----%s----self---%lu----%d\n",__FUNCTION__,pthread_self(),beginnum
queue[(i++)%__SEM_CNT__] = beginnum++;
sem_post(&xfull);//xfull ++
sleep(rand()%3);
}
pthread_exit(NULL);
}
// 创建线程 #include <pthread.h>
? void * thr_custmer(void *arg)
{
int i = 0,num = 0;
while(1)
{
sem_wait(&xfull);
num = queue[(i++)%__SEM_CNT__];
printf("----%s----self---%lu----%d\n",__FUNCTION__,pthread_self(),num);
sem_post(&blank);
sleep(rand()%3);
}
pthread_exit(NULL);
}
int main()
{
sem_init(&blank,0,__SEM_CNT__);
sem_init(&xfull,0,0);
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
pthread_t tid[2];
pthread_create(&tid[0],&attr,thr_producter,NULL);
pthread_create(&tid[1],&attr,thr_custmer,NULL);
pthread_attr_destroy(&attr);
pthread_exit(NULL);
sem_destroy(&blank);
sem_destroy(&xfull);
return 0;
}
linux c++(线程 & 信号量 & 生产者消费者模型)
原文:https://www.cnblogs.com/lodger47/p/14742054.html