信号量:
CreateSemaphoreEx
WaitForSingleObject(g_semaphore,INFINITE);
doing...
ReleaseSemaphore(g_semaphore,1,NULL);

mutex
containing a thread ID, it will cach the caller thread id.

WaitForInputIdle used to father process wait child process that have doned all input job.
MsgWaitForMultipleObjects wait both kernel object and window message.

WaitForDebugEvent
SignalObjectAndWait

SetEvent(hDoned)
WaitForSingleObject(hToBeDone,INFINTE); //maybe susppend, so maybe can't get down PlusEvent event.

WaitForSingleObject(hDoned,INFINTE);
PlusEvent(hToBeDone);

SetEvent(hDoned)
WaitForSingleObject(hToBeDone,INFINTE)
should be
SingnalObjectAndWait(hDoned,hToBeDone,INFINITE,FALSE);

使用等待链遍历API来检测死锁 存在局限性,不支持WaitForMultipleObjects函数
OpenThreadWaitChainSession


#include <Windows.h>
#include <process.h>
#include <iostream>
#include <mutex>HANDLE g_semaphore = NULL;
HANDLE g_event = NULL;
std::mutex g_lock;unsigned __stdcall ThreadFunc( void* pArguments )
{do{WaitForSingleObject(g_semaphore,INFINITE);{std::lock_guard<std::mutex> lockguard(g_lock);std::wcout << L"Thread: " << (int)pArguments << L" is processing..." <<std::endl;}Sleep(500);ReleaseSemaphore(g_semaphore,1,NULL);}while(WaitForSingleObject(g_event,1) == WAIT_TIMEOUT);{std::lock_guard<std::mutex> lockguard(g_lock);std::wcout << L"Thread: " << (int)pArguments << L" ending..." <<std::endl;}_endthreadex( 0 );return 0;
} int wmain()
{ g_semaphore = CreateSemaphoreEx(NULL,6,6,NULL,0,SEMAPHORE_ALL_ACCESS );g_event = CreateEventEx(NULL,NULL,CREATE_EVENT_MANUAL_RESET,EVENT_ALL_ACCESS);HANDLE hThread[6] = { NULL };for(int i= 0; i< 6; i++){hThread[i] = (HANDLE)_beginthreadex( NULL, 0, &ThreadFunc, (void*)i, 0, NULL );}if( IDYES == MessageBoxW(NULL,L"Do you want to close ?", L"Close", MB_YESNO) ){SetEvent(g_event);}for(int i=0; i < 6; ++i){CloseHandle( hThread[i] );hThread[i] = NULL;}Sleep(1000);CloseHandle(g_semaphore);CloseHandle(g_event);return 0;
}

事件,信号量,互斥量相关推荐

  1. 信号量 互斥量 条件变量

    原文:https://blog.csdn.net/qq_32646795/article/details/78221005 本文打算写一些和锁有关的东西,谈一谈我对锁的原理和实现的理解,主要包含以下方 ...

  2. Windows事件等待学习笔记(四)—— 事件信号量互斥体

    Windows事件等待学习笔记(四)-- 事件&信号量&互斥体 要点回顾 事件 实验:验证SignalState 第一步:编译并运行以下代码 第二步:观察结果 第三步:修改代码并执行 ...

  3. 临界区、事件、互斥量、 信号量--四种控制多线程同步与互斥的方法

    // MultiThread.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h"#include <Windows.h> #inclu ...

  4. 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题

    秒杀多线程第十五篇 关键段,事件,互斥量,信号量的"遗弃"问题 在<秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量>中对经典多线程同步互斥问题进行了回 ...

  5. 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量

    前面<秒杀多线程第四篇一个经典的多线程同步问题>提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了 ...

  6. 经典线程同步总结 关键段 事件 互斥量 信号量

    本文参考了http://blog.csdn.net/morewindows/article/details/7538247 1.线程(进程)同步的主要任务 答:在引入多线程后,由于线程执行的异步性,会 ...

  7. 线程同步(临界区、互斥量、事件、信号量)

    1.为什么线程要同步? #include<windows.h> #include<iostream> using namespace std; DWORD WINAPI Thr ...

  8. linux知识(二)互斥量、信号量和生产者消费者模型

    linux知识(二)互斥量.信号量和生产者消费者模型 一.互斥量 产生原因 二.信号量 生产者消费者模型 一.互斥量 产生原因 使用多线程常常会碰到数据混乱的问题,那么使用互斥量,相当于"加 ...

  9. OS: 读者写者问题(写者优先+LINUX+多线程+互斥量+代码)(转)

    一. 引子 最近想自己写个简单的 WEB SERVER ,为了先练练手,熟悉下在LINUX系统使用基本的进程.线程.互斥等,就拿以前学过的 OS 问题开开刀啦.记得当年学读者写者问题,尤其是写者优先的 ...

  10. 5.FreeRTOS学习笔记- 互斥量

    基本概念 互斥量又称互斥信号量(本质是信号量),是一种特殊的二值信号量 互斥量 支持互斥量所有权.递归访问以及防止优先级翻转的特性,用于实现对临界资源(如显示器.打印机)的独占式访问. 任意时刻互斥量 ...

最新文章

  1. Exception in thread main java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static;只能在静态类型或顶级类型中才能声明静态方法
  2. php中访问控制关键字,PHP 关于访问控制和运算符优先级简介
  3. centos7 tmp目录 自动清理规则
  4. dom解析和生成XML文件
  5. angularJS——模块
  6. JSP页面中的pageEncoding和contentType两种属性
  7. 交换机的三种转发模式
  8. BFS——广度优先算法(Breadth First Search)
  9. 五大板块(3)—— 结构体
  10. .NET 传奇 1.0 的出版过程,以及未来计划
  11. Android 之View绘图原理总结
  12. 5分钟能回答的人,年薪25万美金以上
  13. Java Collection接口详解
  14. C++11 随机数生成
  15. SAP License:什么是ERP供应链
  16. java技术大牛之路
  17. IP这么火究竟什么才是有价值的IP
  18. android 指纹识别驱动 win10,win10怎么添加指纹识别?Win10 Windows Hello指纹登录设置教程...
  19. 双旦七大行业营销活动方案
  20. 除权除息,前复权,后复权,不复权

热门文章

  1. Python语言学习之双下划线那些事:python和双下划线使用方法之详细攻略
  2. EL之GB(GBC):利用GB对多分类问题进行建模(分层抽样+调1参)并评估
  3. 成功解决TypeError: __init__() got an unexpected keyword argument 'serialized_options'
  4. Competition——ML/DL:机器学习、深度学习各种计算机视觉、自然语言处理、科学预测等等比赛竞赛简介
  5. ECS:利用ECS进行深度学习详细攻略
  6. JAVA_OA(六):SpringMVC登陆实例
  7. Web应用开发技术(1)-html
  8. 互联网大厂高频重点面试题
  9. JavaWeb学习总结(六)—HttpServletResponse
  10. webpack中设置jquery为全局对象