社区
Power Linux
帖子详情
如果有三个线程R,W1,W2,共享一个缓冲器B
wqssqw123
2018-05-23 10:43:43
如果有三个线程R,W1,W2,共享一个缓冲器B,而B中每次只能存放一个数。当缓冲器中无数时,进程R可以将从输入设备上读入的数存放到缓冲器中。若存放到缓冲器中的时奇数,则允许进程W1将其取出打印;若存放到缓冲器中的时偶数,则允许进程W2将其取出打印。(1)写出三个并发线程能正确工作的描述代码。(2)写出能在Linux环境运行的三个并发线程C语言代码。
...全文
2902
1
打赏
收藏
如果有三个线程R,W1,W2,共享一个缓冲器B
如果有三个线程R,W1,W2,共享一个缓冲器B,而B中每次只能存放一个数。当缓冲器中无数时,进程R可以将从输入设备上读入的数存放到缓冲器中。若存放到缓冲器中的时奇数,则允许进程W1将其取出打印;若存放到缓冲器中的时偶数,则允许进程W2将其取出打印。(1)写出三个并发线程能正确工作的描述代码。(2)写出能在Linux环境运行的三个并发线程C语言代码。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
宁南学者
2018-05-24
打赏
举报
回复
附上代码,仅供参考,三个线程的同步.. #include<iostream> using namespace std; #include <pthread.h> #include <semaphore.h> #include <pthread.h> #include <unistd.h> int buff;// bool first=false; pthread_cond_t read_cond=PTHREAD_COND_INITIALIZER; pthread_cond_t write1_cond=PTHREAD_COND_INITIALIZER; pthread_cond_t write2_cond=PTHREAD_COND_INITIALIZER; pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; void *Read(void *arg) { int i=1; while(1) { cout<<"in read ... "<<endl; pthread_cond_wait(&read_cond,&mutex); buff=i; if(i%2==0) { pthread_cond_signal(&write2_cond); } else { pthread_cond_signal(&write1_cond); } i++; } return NULL; } void *Write1(void *arg) { cout<<" in write1"<<endl; while(1) { pthread_cond_wait(&write1_cond,&mutex); if(!first) { first=true; } cout<<buff<<" write one---"<<endl; buff=-1; pthread_cond_signal(&read_cond); } return NULL; } void *Write2(void *arg) { cout<<"in write2"<<endl; while(1) { pthread_cond_wait(&write2_cond,&mutex); cout<<buff<<" write two---"<<endl; buff=-1; pthread_cond_signal(&read_cond); } return NULL; } int main() { pthread_t pid1,pid2,pid3; pthread_create(&pid1,NULL,Read,NULL); pthread_create(&pid2,NULL,Write1,NULL); pthread_create(&pid3,NULL,Write2,NULL); while(first == false ) { pthread_cond_signal(&read_cond); usleep(10); } while(1) { usleep(2000); } pthread_join(pid1,NULL); pthread_join(pid2,NULL); pthread_join(pid3,NULL); pthread_cond_destroy(&read_cond); pthread_cond_destroy(&write1_cond); pthread_cond_destroy(&write2_cond); return 0; }
cl编译器参数在bat命令行指导.txt
本文档基于提供的`cl编译器参数在bat命令行指导.txt`文件内容,详细解析了如何使用CL编译器及其常用参数,并通过
一个
具体的批处理文件示例来展示如何清理旧文件并进行编译与链接。 #### 二、批处理文件内容分析 1....
生产者消费者拓展问题 (操作系统好难(づ╥﹏╥)づ
三个
进程R、
W1
、
W2
共享
一
缓冲器
B,而B中一次只能存放
一个
数。R将从输入设备上读入的数放到
缓冲器
B中。若存放的是奇数,则允许
W1
将其取出打印,如果是偶数,由进程
W2
取出打印,试用PV操作和信号量来描述他们之间的...
多
线程
程序设计---pthread库、信号量的使用
现有4个
线程
R1,R2,
W1
和
W2
,它们
共享
可以存放
一个
数的
缓冲器
B。
线程
R1每次把从键盘上读入的
一个
数存放到
缓冲器
B中,供
线程
W1
打印输出;
线程
R2每次从磁盘上读
一个
数放到
缓冲器
B中,供
线程
W2
打印输出。当
一个
线程
把...
缓冲区进程互斥
有四个进程,R1,R2,
W1
,
W2
,
一个
共享
缓冲器
B,B可以存储
一个
字符,R1可以从磁盘写入
一个
字符到B,R2可以从寄存器写入
一个
字符到B,
W1
从B中取出
一个
字符送到打印机打印,
W2
将字符读出并送往显示器显示,B只能互斥...
操作系统原理分析实验
操作系统原理分析要点 ... 进程的调度时机与进程切换机制 ------------- 调度时机 中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态...内核
线程
可以直接调用schedule...
Power Linux
744
社区成员
901
社区内容
发帖
与我相关
我的任务
Power Linux
该论坛主要探讨Linux系统在IBM Power平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
复制链接
扫一扫
分享
社区描述
该论坛主要探讨Linux系统在IBM Power平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章