#include <stdio.h>
#include <numeric>
#include <vector>
#include <string>
#include <map>
#include <iostream>
#include "windows.h"
using namespace std;
CRITICAL_SECTION cs1;
CRITICAL_SECTION cs2;
CRITICAL_SECTION csprint;
//初始化关键代码段
void InitMyCriticalSection();
//删除关键代码段
void DeleteMyCriticalSection();
//打印信息
void PrintString(const char* pData);
DWORD WINAPI Thread1(LPVOID lpParameter);
DWORD WINAPI Thread2(LPVOID lpParameter);
int main(char* argv[], char* envp[])
{
int nRetCode = 0;
//初始化关键代码段
InitMyCriticalSection();
//创建线程
HANDLE hThread1 = CreateThread(NULL, 0, Thread1, NULL, 0, NULL);
HANDLE hThread2 = CreateThread(NULL, 0, Thread2, NULL, 0, NULL);
//等待线程结束
WaitForSingleObject(hThread1, INFINITE);
WaitForSingleObject(hThread2, INFINITE);
//关闭线程句柄
CloseHandle(hThread1);
CloseHandle(hThread2);
//释放关键代码段
DeleteMyCriticalSection();
return nRetCode;
}
void InitMyCriticalSection()
{
InitializeCriticalSection(&cs1);
InitializeCriticalSection(&cs2);
InitializeCriticalSection(&csprint);
}
void DeleteMyCriticalSection()
{
DeleteCriticalSection(&cs1);
DeleteCriticalSection(&cs2);
DeleteCriticalSection(&csprint);
}
DWORD WINAPI Thread1(LPVOID lpParameter)
{
for (int i = 0; i < 5; i++)
{
EnterCriticalSection(&cs1);
Sleep(500);
EnterCriticalSection(&cs2);
PrintString("Thread1");
LeaveCriticalSection(&cs2);
LeaveCriticalSection(&cs1);
}
return 1;
}
DWORD WINAPI Thread2(LPVOID lpParameter)
{
for (int i = 0; i < 5; i++)
{
EnterCriticalSection(&cs2);
Sleep(500);
EnterCriticalSection(&cs1);
PrintString("Thread2");
LeaveCriticalSection(&cs1);
LeaveCriticalSection(&cs2);
}
return 1;
}
void PrintString(const char* pData)
{
EnterCriticalSection(&csprint);
std::cout<<pData<<std::endl;
LeaveCriticalSection(&csprint);
}
windows下线程死锁
最新推荐文章于 2023-02-26 21:19:03 发布