如果有三个线程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 打赏 收藏 转发到动态 举报
写回复
用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; }

742

社区成员

发帖
与我相关
我的任务
社区描述
该论坛主要探讨Linux系统在IBM Power平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
社区管理员
  • Power Linux社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧