进程死锁模拟

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


int tickets=30;
/*临界区对象*/
CRITICAL_SECTION g_csA,g_csB;
/*线程数据信息*/
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
    while(1)
    {
        /*进入临界区*/
        EnterCriticalSection(&g_csA);
        Sleep(1);
        if(tickets>0)
        {
            EnterCriticalSection(&g_csB);
            Sleep(1);
            printf("thread1 sell ticket:%d\n",tickets--);
            /*离开临界区*/
            LeaveCriticalSection(&g_csA);
        }
        else
        {
            LeaveCriticalSection(&g_csA);
            break;
        }
    }
    return 0;
}

DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
    while(1)
    {
        EnterCriticalSection(&g_csB);
        Sleep(1);
        if(tickets>0)
        {
            EnterCriticalSection(&g_csA);
            Sleep(1);
            printf("thread2 sell ticket:%d\n",tickets--);
            LeaveCriticalSection(&g_csB);
        }
        else
        {
            LeaveCriticalSection(&g_csB);
            break;
        }
    }
    return 0;
}

int main()
{
    HANDLE hThread1,hThread2;
    /*创建线程*/
    hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
    hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
    CloseHandle(hThread1);
    CloseHandle(hThread2);
    /*创建临界区对象*/
    InitializeCriticalSection(&g_csA);
    InitializeCriticalSection(&g_csB);
    Sleep(1000);
    /*释放临界区对象资源*/
    DeleteCriticalSection(&g_csA);
    return 0;
}
原文地址:https://www.cnblogs.com/NoSoul/p/2552255.html