- 90
- 0
- 约2.29千字
- 约 7页
- 2021-08-11 发布于山东
- 举报
c语言实现多个生产者和消费者
c语言实现多个生产者和消费者
PAGE / NUMPAGES
c语言实现多个生产者和消费者
操作系统的一个经典问题是 生产者 - 花费者 问题, 这波及同步信号
量和互斥信号量的应用 , 在这里 , 我用线程的同步和互斥来实现 .
/*
author 张文
2008/06/20
*/
#include stdio.h
#include stdlib.h
#include unistd.h
#include pthread.h
#include semaphore.h
#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);
}
}
/* 花费者方法 */
void *prochase()
{
int id = ++prochase_id;
while(1)
{
用 sleep 的数目能够调理生产和花费的速度,便于察看
sleep(1);
//sleep(1);
sem_wait(full_sem);
pthread_mutex_lock(mutex);
out = out % M;
printf(prochase%d in %d. like: \t, id, out);
buff[out] = 0;
print();
++out;
pthread_mutex_unlock(mutex);
sem_post(empty_sem);
}
}
int main()
{
pthread_t id1[N];
pthread_t id2[N];
int i;
int ret[N];
初始化同步信号量
int ini1 = sem_init(empty_sem, 0, M);
int ini2 = sem_init(full_sem, 0, 0);
if(ini1 ini2 != 0)
{
printf(sem init failed \n);
exit(1);
}
初始化互斥信号量
int ini3 = pthread_mutex_init(mutex, NULL); if(ini3 != 0)
{
printf(mutex init failed \n);
exit(1);
}
创立 N个生产者线程
for(i = 0; i N; i++)
{
ret[i] = pthread_create(id1[i], NULL, product, (void *)(i));
if(ret[i] != 0)
{
printf(product%d creation failed \n, i);
exit(1);
}
}
创立 N个花费者线程
for(i = 0; i N; i++)
{
ret[i] = pthread_create(id2[i], NULL, prochase, NULL);
if(ret[i] != 0)
{
printf(prochase%d creation failed \n, i);
exit(1);
}
}
销毁线程
for(i = 0; i N; i++)
{
pthread_join(id
您可能关注的文档
- 2020年高考语文一轮复习语言文字应用专题八:压缩语段.doc
- 2020年高考语文作文素材之时事热评:莫让“悲情营销”消费爱心.doc
- 2020年黑龙江龙东地区中考语文考试说明.doc
- 2020年鼠年拜年短信大全.doc
- 2020江西高考作文题目预测及范文:克服恐惧,勇敢抉择.doc
- 2020深圳中考作文题目解析及范文.doc
- 2020申论考试热点及范文.doc
- 2020秋季学期幼儿园大班班主任工作计划.doc
- 2020管理学考研冲刺模拟试题及答案(一).doc
- 2020高考作文素材:习惯.doc
- 【25秋三上语文期中总复习重点必练(课文、古诗、名言、日积月累)含答案14页.docx
- 湖南工程学院应用技术学院《遥感概论》2023-2024学年第一学期期末试卷.doc
- 江西省上饶市鄱阳县2025年中考数学试题一轮复习高中总复习含解析.doc
- 学校食堂配送服务方案(6).docx
- 浙江越秀外国语学院《食品加工概论》2023-2024学年第一学期期末试卷.doc
- 平顶山文化艺术职业学院《电工电子技术(二)》2023-2024学年第一学期期末试卷.doc
- 内蒙古包头三十三中2023-2024学年高三最后一卷语文试卷含解析.doc
- 配电盘行业相关投资计划提议范本.docx
- 2025届内蒙古通辽市奈曼旗八上数学期末学业水平测试模拟试题含解析.doc
- 【25秋一上语文看拼音写词语(含答案16页)(1).docx
原创力文档

文档评论(0)