#include
#include
#include
#include
#define NUM 5
int queue[NUM];
sem_t blank_number, product_number;
void *producer(void *arg)
{
int c = 0;
while (1)
{
sem_wait(&blank_number);
queue[c] = rand()%10+1;
sem_post(&product_number);
printf("Product %d\n", queue[c]);
c = (c + 1) % NUM; //为了让五个空间循环使用
sleep(rand()%5);
}
}
void *consumer(void *arg)
{
int m = 0;
while (1)
{
sem_wait(&product_number);
printf("Consumer %d\n", queue[m]);
queue[m] = 0;
sem_post(&blank_number);
m = (m + 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;
}
线程间同步 之 信号量
最新推荐文章于 2022-12-01 15:24:00 发布