【文件属性】:
文件名称:linux下的生产者消费者问题
文件大小:2KB
文件格式:TXT
更新时间:2013-06-07 13:52:49
linux下的生产者消费者问题
#include
#include
#include
#include
#include
#define N 2 // 消费者或者生产者的数目
#define M 10 // 缓冲数目
int in = 0; // 生产者放置产品的位置
int out = 0; // 消费者取产品的位置
int buff[M] = {0}; // 缓冲初始化为0, 开始时没有产品
sem_t empty_sem; // 同步信号量, 当满了时阻止生产者放产品
sem_t full_sem; // 同步信号量, 当没产品时阻止消费者消费
pthread_mutex_t mutex; // 互斥信号量, 一次只有一个线程访问缓冲
int product_id = 0; //生产者id
int prochase_id = 0; //消费者id
/* 打印缓冲情况 */
void print()
{
int i;
for(i = 0; i < M; i++)
printf("%d ", buff[i]);
printf("\n");
}
/* 生产者方法 */
void *product()
{
int id = ++product_id;
while(1)
{
// 用sleep的数量可以调节生产和消费的速度,便于观察
sleep(1);
//sleep(1);
sem_wait(&empty_sem);
pthread_mutex_lock(&mutex);
in = in % M;
printf("product%d in %d. like: \t", id, in);
buff[in] = 1;
print();
++in;
pthread_mutex_unlock(&mutex);
sem_post(&full_sem);
}
}
网友评论
- 不错的代码,是互斥锁和计数信号量解决生产者消费者问题,代码没有问题,可以编译运行,已经测试过,注释也有,谢谢分享~!!!
- 写的很好 值得借鉴
- 不错的,可以运行的
- 不错,是互斥锁和计数信号量解决生产者消费者问题
- 还不错,完美运行
- 一小段代码,,,写的不错,,,注释也还行,,只不过感觉5分有点多哦亲。
- 程序很完美,一点错误都没有~而且注释详细,很好懂。学生党直接拿去用了
- 是很好的程序,运行过,没有错误。并且注释也很清晰
- 很实用,算法也是优化过的
- 非常好,细节都想的很周到,是出色的程序