zoukankan      html  css  js  c++  java
  • 火车票线程同步(一)互斥体实现

    *注:(此代码必背

    ##

    #include <windows.h>
    #include <iostream>
    
    int tickets = 100;
    HANDLE hMutex;
    
    DWORD WINAPI FunProc1(LPVOID param)
    {
        while (TRUE)
        {
            WaitForSingleObject(hMutex, INFINITE);
            if (tickets > 0)
            {
                std::cout << "thread1 sell ticket:" << tickets-- << std::endl;
            }
            else
                break;
            ReleaseMutex(hMutex);
        }
        return 0;
    }
    DWORD WINAPI FunProc2(LPVOID param)
    {
        while (TRUE)
        {
            WaitForSingleObject(hMutex, INFINITE);
            if (tickets > 0)
            {
                std::cout << "thread2 sell ticket:" << tickets-- << std::endl;
            }
            else
                break;
            ReleaseMutex(hMutex);
        }
        return 0;
    }
    
    int main()
    {
        HANDLE hThread1, hThread2;
        hMutex = CreateMutex(NULL, FALSE, NULL);//创建互斥体的线程(也就是此主线程)不拥有
        //互斥对象,操作系统会将计数置为0,设为有信号状态。
        hThread1 = CreateThread(NULL, 0, FunProc1, NULL, 0, NULL);
        hThread2 = CreateThread(NULL, 0, FunProc2, NULL, 0, NULL);
        CloseHandle(hThread1);
        CloseHandle(hThread2);
        Sleep(4000);
    }

    注释:

    在创建互斥对象时,第二个参数为FALSE值,表明当前没有线程拥有这个互斥对象,于是操作系统就会将该互斥对象设置为有信号状态。

  • 相关阅读:
    POJ 3278 Catch That Cow(BFS)
    POJ 2488 A Knight's Journey(DFS)
    POJ 2386 Lake Counting(DFS)
    迷宫问题(BFS)
    两点(DFS)
    POJ 1001 Exponentiation(大数运算)
    Java IO流01-总叙
    hdu 2065 "红色病毒"问题(快速幂求模)
    POJ 2251 Dungeon Master(BFS)
    POJ 1321 棋盘问题(DFS)
  • 原文地址:https://www.cnblogs.com/tinaluo/p/7710768.html
Copyright © 2011-2022 走看看