李白和杜甫共享一个棋盘下象棋。一个叫李白的程序,输出李白走的10步棋。一个杜甫程序,输出杜甫的10步棋,一个裁判程序裁定二者下棋。C++实现信号量及P、V操作。

one.cpp

#include <windows.h>
#include <stdio.h>

#define PROG_NAME "李白"
HANDLE lb_to_cp, cp_to_lb; //声明信号量

void P(HANDLE s)  //P操作
{
    WaitForSingleObject(s, INFINITE);
}
void V(HANDLE s)  //V操作
{
    ReleaseSemaphore(s, 1, NULL );
}

int main()
{
    int i=0;
    HWND hwnd=GetForegroundWindow(); //获取程序窗口句柄
    char acts[][9]={"炮二平五","马二进三","车一进一","车一平六","车六进七","车九进一","炮八进五","炮五进四","车九平六","前车进一","车六平四","车四进六","炮八平五"};

    HANDLE hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE, 0,0x100,"CHESS_BOARD"); //创建共享内存
    LPSTR chess_menu=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0); //进程连接共享内存,得到共享内存首地址
    lb_to_cp=OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"Global\\lb_to_cp");    //信号量初始化为0
    cp_to_lb=OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"Global\\cp_to_lb");    //信号量初始化为0
    if(lb_to_cp==NULL){
        printf("LB-to-CP信号量错\n");
        return -1;
    }
    if(cp_to_lb==NULL){
        printf("CP-to-LB信号量错\n");
        CloseHandle(cp_to_lb);
        return -1;
    }
    for(i=0; i<sizeof(acts)/9; i++) {
        P(cp_to_lb); //P操作: 等待裁判允许
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hide17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值