当前位置:  技术问答>linux和unix

这两个p操作可以互换吗?

    来源: 互联网  发布时间:2016-11-10

    本文导语:  生产者进程 while(TRUE) {      生产一个产品;      P(empty);      P(mutex1);      产品送往buffer(in);      in=(in+1)mod n;      V(mutex1);      V(full); } 消费者进程 while(TRUE) {    P(full);    P(mutex2);    从buffer...

生产者进程
while(TRUE)
{
     生产一个产品;
     P(empty);
     P(mutex1);
     产品送往buffer(in);
     in=(in+1)mod n;
     V(mutex1);
     V(full);
}


消费者进程
while(TRUE)
{
   P(full);
   P(mutex2);
   从buffer(out)中取出产品;
   out=(out+1)mod n;
   V(mutex2);
   V(empty);
   消费该产品;
}

|
不行
回复内容太短了!

|
不行,即使可以增大了mutex的作用空间也会造成性能下降

|
 P(empty);可以检测非空。当然是先测试再放入数据了

|
看不出p(mutex1)和p(mutex2)的作用

|
不能互换
P(empty);
P(mutex1);

假设互换:
即先
P(mutex1);
此时如果empty为空了,生产者就在此阻塞了,而且是占着mutex1阻塞的。此时消费者想消费一个产品都办不到,因为mutex1被生产者占有。
生产者、消费者都无法进行下去了。

|
本身命题就错误,你说可否互换的前提是不互换程序是正确的,但很显然,mutex1和mutex2你是期望保护同一段资源(不要告诉我in和out在内存里面不重叠),所以不管是否互换,程序都是错误的。

|


如果mutex1和mutex2不是同一个变量,那么这个程序的意义不是很大吧。
生产者使用mutex1,消费者使用mutex2,就不能防止消费着和生产者同时访问产品缓冲区,从而出现错误。

|
不行,P操作是危险操作,需要先P临界资源

    
 
 

您可能感兴趣的文章:

  • Java两个变量的互换(不借助第3个变量)具体实现方法
  • 你们看是不是可以这样理解:在用来进行两个对象的比较时,==操作符用来比较两个对象的引用地址,而equals()用来比较两个对象的值。
  • 很菜的问题关于两个dialog只能操作其中的一个
  • vware如何在两个操作系统之间传送文件
  • VMware中两个操作系统文件访问
  • 急!请教两个命令(操作目录)
  • 如何同时启动两个操作系统?
  • 请教如何在qt-linux环境下两个cpp文件中对同一个数组作读写互斥操作?
  • 现在有两个操作系统:win98+win2000;请问在这样的环境下怎样安装linux?谢谢!!
  • JAVA JODBC中怎样连续操作两个(或以上)的SQL语句
  • 笔记本电脑装两个操作系统,有什么需要注意的吗?
  • 不解决也给分。如何使用vmware?我的能用vmware运行两个操作系统吗?
  • 如何让两个byte类型的变量a和b进行异或(^)操作,然后将结果存入另一个byte中?
  • 两个关于linux基本操作的问题
  • 如果两个线程操作同一个Socket,一个线程recv,另一个send。这样会不会导致程序莫名其妙的退出
  • 请问为什么我安装了RedHat Linux 9和Win2000Pro两个操作系统后机子老死机?
  • 菜鸟来求教,如何分区,本人装两个操作系统
  • 一块硬盘安装了两个linux操作系统,它们可以共同使用一个Swap分区吗?
  • 高分求助:bigphysareas和mmap的操作在两个不同的版本返回的结果不同
  • UNIX下两个进程对一个文件操作
  • 用netlink进行用户态和内核态通信,想传两个整数进去,该如何操作,我只会发个字符串进去,求关键部位代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ MultiMaps 成员 swap():交换两个multimaps
  • 急!有两个char buf[]里面是两个日期(2004-08-02),怎样判断两个日期之间的天数?(只能用标准C)
  • C++ Lists(链表) 成员 merge():合并两个list
  • 一个Statement不能同时打开两个ResultSet?为了同时打开两个,可以考虑建立两个Statement?甚至两个Connection?
  • C++ Lists(链表) 成员 swap():交换两个list
  • Keepalived 能配两个虚拟ip吗,匹配两个数据库实例?
  • C++ Maps 成员 swap():交换两个map
  • 可以有其他两个类的实例同时调用一个java实例的两个方法吗?
  • C++ Vectors 成员 swap():交换两个Vector
  • 两个域名,两个端口,一个服务器……
  • C++ Lists(链表) 成员 splice():合并两个list
  • 下载了jbuilder5,是rar格式的,解开后有两个文件,一个是rsc-jb5.bin,一个是rsc-jb5.cue,据说这两个文件是刻光盘的,请问谁知道怎么刻?不会用这两个文件直接安装吧?谢谢!
  • C++ Strings(字符串) 成员 swap():交换两个字符串的内容
  • 基础问题,刚学的!请教,两个日期格式变量,我要求两个日期之间的天数,怎么求?
  • C++ Strings(字符串) 成员 compare():比较两个字符串
  • 主进程有两个线程,fork子进程后复制主进程两个线程的内存么?
  • cocos2d中CCSpriteFrameCache文件同时存在两个plist的问题解决
  • 我机器上安装了linux和win2000两个系统,请问如何在两个系统之间切换。
  • linux字符模式下怎样可以运行两个任务(开两个终端)
  • 听说,初学JAVA有两个开源程序是必看的,请问是哪两个。在那里下载?
  • 由同一个服务端创建两个线程分别向两个客户端同时发送不同的数据···


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3