社区
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语言代码。
...全文
2791
1
打赏
收藏
如果有三个线程R,W1,W2,共享一个缓冲器B
如果有三个线程R,W1,W2,共享一个缓冲器B,而B中每次只能存放一个数。当缓冲器中无数时,进程R可以将从输入设备上读入的数存放到缓冲器中。若存放到缓冲器中的时奇数,则允许进程W1将其取出打印;若存放到缓冲器中的时偶数,则允许进程W2将其取出打印。(1)写出三个并发线程能正确工作的描述代码。(2)写出能在Linux环境运行的三个并发线程C语言代码。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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; }
VC++Windows多
线程
实战图片编辑器
随着CPU的多核心的发展,不管是在哪个平台,多
线程
的编程已经是我们工程师必须掌握的技能,我们都知道单
线程
编程只能利用到cpu的
一个
核心,对于cpu性能有极大的浪费,并且在界面编程中对于给用户反馈都必须有及时性,如果
一个
操作等半天没有任何响应,知道结束才告知用,那这样的用户体验是极差的,所以也必须要用到多
线程
编程。
多
线程
程序设计---pthread库、信号量的使用
现有4个
线程
R1,R2,
W1
和
W2
,它们
共享
可以存放
一个
数的
缓冲器
B。
线程
R1每次把从键盘上读入的
一个
数存放到
缓冲器
B中,供
线程
W1
打印输出;
线程
R2每次从磁盘上读
一个
数放到
缓冲器
B中,供
线程
W2
打印输出。当
一个
线程
把数据存放到
缓冲器
后,在该数还没有被打印输出之前不准任何
线程
再向
缓冲器
中存数。在
缓冲器
中还没有存入
一个
新的数之前不允许任何
线程
加快从缓冲区中取出打印。编写程序,采用互斥锁或信号量机制使这4个
线程
并发执行协调工作。 提示,互斥锁和信号量定义如下: 互斥锁S:表示能否把数存入
缓冲器
B,初始值为
缓冲区进程互斥
有四个进程,R1,R2,
W1
,
W2
,
一个
共享
缓冲器
B,B可以存储
一个
字符,R1可以从磁盘写入
一个
字符到B,R2可以从寄存器写入
一个
字符到B,
W1
从B中取出
一个
字符送到打印机打印,
W2
将字符读出并送往显示器显示,B只能互斥使用。请你设计
一个
算法完成进程同步,说明你的信号量和初始值,并用PV操作描述代码。【2016年北京大学自主命题831,第二(3)题】
操作系统原理分析实验
操作系统原理分析要点 https://www.cnblogs.com/huyufeng/p/5400639.html 进程的调度时机与进程切换机制 ------------- 调度时机 中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(); 内核
线程
可以直接调用schedule...
多
线程
(3)
1、
线程
通信 生产者与消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是
一个
多
线程
同步问题的经典案例。 该问题描述了两个(多个)
共享
固定大小缓冲区的
线程
——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。 生产
Power Linux
742
社区成员
901
社区内容
发帖
与我相关
我的任务
Power Linux
该论坛主要探讨Linux系统在IBM Power平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
复制链接
扫一扫
分享
社区描述
该论坛主要探讨Linux系统在IBM Power平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章