进程互斥

原创 2016年06月01日 19:33:28

代码及运行结果:

#include "windows.h"

#include "process.h"

#include<iostream>

#define N 5 //顺时针排序

#define R(x) (x)

#define L(x) ((x+1)%N)

using namespace std;

HANDLE hMutex[N];

HANDLE Mutex; 

void pick_up(int me)

{

 if(me==0)

 {

      WaitForSingleObject(hMutex[L(me)],INFINITE);//等左边筷子

WaitForSingleObject(Mutex,INFINITE);

      cout<<"No."<<me<<"Philosopher pick up  left  No."<<L(me)<<"chopstick"<<endl;

      ReleaseMutex(Mutex);

Sleep(500);

      WaitForSingleObject(hMutex[R(me)],INFINITE);//等右边筷子

WaitForSingleObject(Mutex,INFINITE);

      cout<<"No."<<me<<"Philosopher pick up  rightNo."<<R(me)<<" chopstick"<<endl;

      ReleaseMutex(Mutex);

Sleep(500);

 }

 else

 {

      WaitForSingleObject(hMutex[R(me)],INFINITE);//等右边筷子

WaitForSingleObject(Mutex,INFINITE);

      cout<<"No."<<me<<"Philosopher pick up  rightNo."<<R(me)<<" chopstick"<<endl;

      ReleaseMutex(Mutex);

Sleep(500);

      WaitForSingleObject(hMutex[L(me)],INFINITE);//等左边筷子

WaitForSingleObject(Mutex,INFINITE);

      cout<<"No."<<me<<"Philosopher pick up  left  No."<<L(me)<<"chopstick"<<endl;

      ReleaseMutex(Mutex);

Sleep(500);

 }

}

void put_down(int me)

{

      ReleaseMutex(hMutex[R(me)]);

WaitForSingleObject(Mutex,INFINITE);

      cout<<"No."<<me<<"Philosopher put down right No."<<R(me)<<"chopstick"<<endl;

      ReleaseMutex(Mutex);

ReleaseMutex(hMutex[L(me)]); 

WaitForSingleObject(Mutex,INFINITE);

      cout<<"No."<<me<<"Philosopher put down left No."<<L(me)<<" chopstick"<<endl;

      ReleaseMutex(Mutex);

}

DWORD WINAPI PhilosopherThread(LPVOIDlpParameter)

{

 int*me=(int *)lpParameter;

 while(1)

 {

      pick_up(*me);

WaitForSingleObject(Mutex,INFINITE);

      cout<<"No."<<*me<<"Philosopher is eating..."<<endl;

      ReleaseMutex(Mutex);

Sleep(500);

      put_down(*me);

WaitForSingleObject(Mutex,INFINITE);

      cout<<"No."<<*me<<"Philosopher is thinking..."<<endl;

      ReleaseMutex(Mutex);

Sleep(500);

}

 return 1;

}

int main(int argc, char* argv[])

{

      intThrdNo[5];

      inti;

Mutex=CreateMutex(NULL,FALSE,NULL);

      for(i=0;i<N;i++)hMutex[i]=CreateMutex(NULL,FALSE,NULL);

for(i=0;i<N;i++)

      {

           ThrdNo[i]=i;

           CreateThread(NULL,0,PhilosopherThread,&ThrdNo[i],NULL,NULL);

      }

Sleep(10000);

      return0;

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

临界区进程互斥模拟

  • 2014-10-13 16:59
  • 1.84MB
  • 下载

C例子:进程互斥

  • 2015-12-22 22:32
  • 691B
  • 下载

CreateMutex函数函数用来实现进程互斥

CreateMutex函数 正常情况下,一个进程的运行一般是不会影响到其他正在运行的进程的。但是对于某些有特殊要求的如以独占方式使用串行口等硬件设备的程序就要求在其进程运行期间不允许其他试图使用此端...

实验五、进程互斥实验

  • 2013-05-28 13:43
  • 69KB
  • 下载

进程互斥实验

  • 2015-10-07 21:27
  • 182KB
  • 下载

操作系统之进程互斥与同步和线程

进程的互斥与同步进程间需要相互合作完成某项任务叫做进程同步,进程间通信是直接制约因素. 进程间竞争同一共享资源,产生相应的制约关系.当分配到时独占分配到的,或全部共享的资源. 临界资源:一段时间内...

多进程互斥写sqlite

  • 2012-03-02 13:47
  • 1.28MB
  • 下载

linux进程互斥锁

进程间同步 互斥量mutex 进程间也可以使用互斥锁,来达到同步的目的。但应在pthread_mutex_init初始化之前,修改其属性为进程间共享。mutex的属性修改函数主要有以下几个。 主...
  • oguro
  • oguro
  • 2016-12-25 12:27
  • 157

操作系统实验五之进程互斥实验

题目要求: 理发店问题:假设理发店的理发室中有 3 个理发椅子和 3 个理发师,有一个可容 纳 4 个顾客坐等理发的沙发。此外还有一间等候室,可容纳 13 位顾客等候进入理发 室。顾客如果发现理发店...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)