互斥与同步

用信号量机制解决生产者消费者问题

南笙酒味 提交于 2020-12-14 09:15:33
使用POSIX标准中的Pthreads API来创建多个生产者、消费者线程 定义线程:pthread_t tid 创建线程:pthread_create(&tid,&attr,runner,argv[1]); join线程:pthread_join(tid,NULL); 使用PthreadsAPI的信号量机制互斥与同步 定义信号量:sem_t sem 初始化信号量:sem_init(&sem, 0, n); P操作:sem_wait(&sem); V操作:sem_post(&sem); #include <stdio.h> #include <pthread.h> #include <semaphore.h> #define BUFF_SIZE 5 // 定义缓冲区buffer大小为5 int buffer[BUFF_SIZE]; // 用循环队列模拟缓冲区 int in = 0; // 产品进缓冲区时的缓冲区下标 int out = 0; // 产品出缓冲区时的缓冲区下标 int productID = 0; // 产品号 int consumeID = 0; // 将被消耗的产品号 sem_t s; // 定义互斥信号量, 互斥锁s sem_t n; // 定义同步信号量n, buffer中已放入的产品个数 sem_t e; // 定义同步信号量e, buffer中空单元个数