进程互斥

部署运行你感兴趣的模型镜像

代码及运行结果:

#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;

}


您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值