#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群集资源死锁监控程序,发现deadlock时会直接蓝屏机器
使用C++实现的Windows进程死锁查看工具 包含了源代码和可执行程序 使用场景: 监视进程状态 帮助快速分析进程与线程之间的关系 快速定位死锁 适合C++新手快速上手学习Windows系统层级的开发功能。
从进程同步的概念可以知道,当并发进程需要竞争使用资源或需要相互协作向前推进时,如果不采取同步措施,或同步措施不恰当,则很容易导致并发进程不能向前推进而陷入僵局,即死锁现象。死锁是发生在一组相互竞争或...
java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁...
操作系统实验六:死锁问题实验报告。通过本实验观察死锁产生的现象,考虑解决死锁问题的方法。从而进一步加深对于死锁问题的理解。掌握解决死锁问题的几种算法的编程和调试技术。练习怎样构造管程和条件变量,利用...
POSIX下线程死锁的演示程序(操作系统实验)
死锁详解,详细的为你讲解什么事死锁,如何克服死锁。
查询sql的死锁进程,查找并杀死。解决生产数据库中卡死的现象。postgresql查询死锁以及杀死死锁进程sql
一、数据库死锁的现象 程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。 二、死锁的原理 当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 交,另一条对于这一列...
死锁检测源代码
oracle死锁问题查询代码,仅供参考,有问题大家一起交流
oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁
死锁典型例题,对理解死锁的计算类题目有帮助
解决死锁问题的三种方法:预防死锁,检测死锁及避免死锁。
(了解) 死锁防止(熟悉) 死锁避免(掌握) 死锁检测和恢复(熟悉) [重点]:死锁必要条件、死锁防止、避免、检测和恢复 [难点]:银行家算法。 操作系统-死锁全文共26页,当前为第2页。 2022/6/20 3 汽车竞争路口 ...
数据库死锁,阻塞查询,杀死死锁,阻塞进程
明白死锁产生的原因,在程序中演示死锁产生并从而实现多线程陈旭解决死锁(deadlock)这一类问题。
死锁原理、死锁排查、避免死锁、死锁处理方法、两个死锁示例及解决方法、附:锁兼容性(FROM SQL Server 2005 联机丛书)
判断数据库死锁的SQL,可以检测出死锁的语句和进程
车辆行驶死锁问题,在Linux下用C语言完成下面模型:设有一个T型路口,其中A,B,C,D各处可容纳一辆车,车型方向如图所示。找出死锁并用有序分配法消除之,要求资源编号合理。