c语言程序设计报告问题描述,c语言程序设计报告求助,急急急

实验报告必须有以下内容:

1. 实验内容描述与需求分析

2. 概要设计(数据结构、算法设计)

3. 调试、分析与实验结果

4. 总结

#include

#include

#include

#include #include

#define WRITER 1 // 生产者数目

#define READER 2 // 消费者数目

#define MAXNUM 10 // 缓冲数目

int num2=1,num1=1;//读者,写者次数

pthread_mutex_t rmutex; // 读者互斥信号量, 一次只有一个线程访问缓冲

pthread_mutex_t wmutex; // 写者互斥信号量, 一次只有一个线程访问缓冲

int rcount;//现在读者数目

int r_id = 0; //读者id

void *R(void *arg)//读者

{

int id = ++r_id;

while(num2 <= MAXNUM)

{

// 用sleep的数量可以调节读者和写者的速度,便于观察

sleep(2);

pthread_mutex_lock(&rmutex);//开始读

if( rcount==0 )

pthread_mutex_lock(&wmutex);//判定是否在写

rcount+=1;

pthread_mutex_unlock(&rmutex);//也给别读者一起读

printf("%d 号读者,开始第 %d次读书 \n", id, num2);

sleep(2);

pthread_mutex_lock(&rmutex);//读完

rcount-=1;

if( rcount==0 )

pthread_mutex_unlock(&wmutex);//判定是否可以写

printf("%d 号读者,读完\n", id);

pthread_mutex_unlock(&rmutex);//读者读完

num2+=1;

}

return NULL;

}

void *W(void *arg)//写者

{

while(num1 <= MAXNUM)

{

// 用sleep的数量可以调节读者和写者的速度,便于观察

sleep(1);

pthread_mutex_lock(&wmutex);//开始写

printf("写者第 %d次写书 \n", num1);

sleep(3);

pthread_mutex_unlock(&wmutex);//写完

num1+=1;

}

return NULL;

}

int max(int a, int b)

{

return (a>b)? a : b;

}

int main()

{

pthread_t id1[WRITER];

pthread_t id2[READER];

int i;

int ret[max(READER,WRITER)];// 初始化同步信号量

// 创建N个写者线程

for(i = 0; i < WRITER; i++)

{

ret[i] = pthread_create(&id1[i], NULL, &W, (void *)(&i));

if(ret[i] != 0)

{

printf("Writer %d creation failed \n", i);

exit(1);

}

}

//创建N个读者线程

for(i = 0; i < READER; i++)

{

ret[i] = pthread_create(&id2[i], NULL, &R, NULL);

if(ret[i] != 0)

{

printf("Reader %d creation failed \n", i);

exit(1);

}

}

//销毁线程

pthread_join(id1[0],NULL);

pthread_join(id2[0],NULL);

printf("OK,结束!\n");

exit(0);

}

因为我初学这个东西,不怎么懂那位大侠指点我下,谢谢了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值