`
mylove2060
  • 浏览: 330882 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

windows下线程死锁

 
阅读更多
#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群集资源死锁监控程序

    Windows群集资源死锁监控程序,发现deadlock时会直接蓝屏机器

    使用C++实现的Windows进程死锁查看工具

    使用C++实现的Windows进程死锁查看工具 包含了源代码和可执行程序 使用场景: 监视进程状态 帮助快速分析进程与线程之间的关系 快速定位死锁 适合C++新手快速上手学习Windows系统层级的开发功能。

    操作系统-死锁

    从进程同步的概念可以知道,当并发进程需要竞争使用资源或需要相互协作向前推进时,如果不采取同步措施,或同步措施不恰当,则很容易导致并发进程不能向前推进而陷入僵局,即死锁现象。死锁是发生在一组相互竞争或...

    java死锁源码java死锁源码

    java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁...

    操作系统实验六 死锁问题实验

    操作系统实验六:死锁问题实验报告。通过本实验观察死锁产生的现象,考虑解决死锁问题的方法。从而进一步加深对于死锁问题的理解。掌握解决死锁问题的几种算法的编程和调试技术。练习怎样构造管程和条件变量,利用...

    sisuo.rar_操作系统 线程 实验

    POSIX下线程死锁的演示程序(操作系统实验)

    死锁详解,如何表面死锁

    死锁详解,详细的为你讲解什么事死锁,如何克服死锁。

    postgresql查询死锁以及杀死死锁进程sql.txt

    查询sql的死锁进程,查找并杀死。解决生产数据库中卡死的现象。postgresql查询死锁以及杀死死锁进程sql

    解决ORACLE死锁问题

    一、数据库死锁的现象 程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。 二、死锁的原理 当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 交,另一条对于这一列...

    死锁检测源代码

    死锁检测源代码

    oracle-死锁查询

    oracle死锁问题查询代码,仅供参考,有问题大家一起交流

    oracle解锁,死锁

    oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁oracle解锁,死锁

    死锁典型例题,对理解死锁的计算类题目有帮助

    死锁典型例题,对理解死锁的计算类题目有帮助

    数据库死锁-解决死锁问题的三种办法

    解决死锁问题的三种方法:预防死锁,检测死锁及避免死锁。

    操作系统-死锁.pptx

    (了解) 死锁防止(熟悉) 死锁避免(掌握) 死锁检测和恢复(熟悉) [重点]:死锁必要条件、死锁防止、避免、检测和恢复 [难点]:银行家算法。 操作系统-死锁全文共26页,当前为第2页。 2022/6/20 3 汽车竞争路口 ...

    sql数据库死锁查询工具

    数据库死锁,阻塞查询,杀死死锁,阻塞进程

    多线程死锁

    明白死锁产生的原因,在程序中演示死锁产生并从而实现多线程陈旭解决死锁(deadlock)这一类问题。

    SQL Server死锁总结

    死锁原理、死锁排查、避免死锁、死锁处理方法、两个死锁示例及解决方法、附:锁兼容性(FROM SQL Server 2005 联机丛书)

    数据库死锁判断SQL

    判断数据库死锁的SQL,可以检测出死锁的语句和进程

    车辆行驶死锁问题

    车辆行驶死锁问题,在Linux下用C语言完成下面模型:设有一个T型路口,其中A,B,C,D各处可容纳一辆车,车型方向如图所示。找出死锁并用有序分配法消除之,要求资源编号合理。

Global site tag (gtag.js) - Google Analytics