如果有三个线程R,W1,W2,共享一个缓冲器B,而B中每次只能存放一个数。当缓冲器中无数时,进程R可以将从输入设备上读入的数存放到缓冲器中。若存放到缓冲器中的时奇数,则允许进程W1将其取出打印;若存放到缓冲器中的时偶数,则允许进程W2将其取出打印。(1)写出三个并发线程能正确工作的描述代码。(2)写出能在Linux环境运行的三个并发线程C语言代码。
解决方案 »
- Linux环境下基于ip组播的通信实现相关代码,怎么一直接收不到数据,求帮忙。
- 更换网线引起的线上服务器登录异常
- ARM-LINUX修改脚本自启动用户程序之后ctrl+c无法停止,无法进入命令行
- Arm Linux如何预留并使用超大内存
- linux系统启动后,我将根分区的磁盘拔掉,会影响启动的系统吗?
- 求助 cmake编译Dlib库报错
- 虚拟机
- 程序员的电脑内存推荐几个g啊
- linux内存一直被占用,手动释放不成功,找不到占用内存相应的进程
- linux开发板如何通过FTP远程升级程序
- 「求助!」 Linux驱动中 判断指定文件是否存在?
- xshell和X11 windows都显示中文,但是vmware里面登录level3却显示乱码
#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;
}