同步对象的区别与联系

驱动开发(12)内核中的多线程和同步对象 本博文由优快云博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:在内核模式下创建线程在驱动程序中创建线程的方法是调用 PsCreateSystemThread 内核函数,此函数即可以创建系统线程,也可以创建用户线程。此函数的原型如下:NTSTATUS PsCreateSystemThread( _Out_ PHANDLE 阅读详情

同步对象之间的区别

 MFC对象:CSemaphore/CMutex/CCriticalSection/CEvent区别

临界区:临界区是一种最简单的同步对象,它只可以在同一进程内部使用。它的作用是保证只有一个线程可以申请到该对象。 
         互斥量与临界区的作用非常相似,但互斥量是可以命名的,也就是说它可以跨越进程使用。所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。
         互斥量(Mutex),信号灯(Semaphore),事件(Event)都可以被跨越进程使用来进行同步数据操作,而其他的对象与数据同步操作无关,但对于进程和线程来讲,如果进程和线程在运行状态则为无信号状态,在退出后为有信号状态。所以我们可以使用WaitForSingleObject来等待进程和线程退出。
  通过互斥量我们可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,你的老板会要求你根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号灯对象可以说是一种资源计数器。
         事件,前面讲的信号灯和互斥量可以保证资源被正常的分配和使用,而事件是用来通知其他进程/线程某件操作已经完成。

如果某个线程必须等待某些事件发生后才能存取相应的资源,用CEvent;
如果一个应用同时可以有多个线程存取相应资源,用CSemaphore;
如果有多个应用(多个进程)同时存取相应资源,用CMutex,否则用CCriticalSection

WIN32 API对象:互斥对象与关键代码段的比较

互斥对象和事件对象属于内核对象,利用内核对象进行线程同步,速度较慢,但利用互斥对象和事件对象这样的内核对象,可以在多个进程中的各个线程间进行同步。 
关键代码段是工作在用户方式下,同步速度较快,但在使用关键代码段时,很容易进入死锁状态,因为在等待进入关键代码段时无法设定超时值

就等待线程的调度而言,互斥对象与关键代码段之间有着相同的特性。但是它们在其他属性方面却各不相同。表1对它们进行了各方面的比较。

表1 互斥对象与关键代码段的比较

特性互斥对象关键代码段运行速度慢快是否能够跨进程边界来使用是否声明HANDLE hmtx;CRITICAL_SECTION cs;初始化h m t x = C r e a t e M u t e x(N U L L,FA L S E,N U L L);I n i t i a l i z e C r i t i c a l S e c t i o n ( & e s );清除C l o s e H a n d l e(h m t x);D e l e t e C r i t i c a l S e c t i o n(& c s);无限等待Wa i t F o r S i n g l e O b j e c t(h m t x , I N F I N I T E);E n t e r C r i t i c a l S e c t i o n(& c s);0等待Wa i t F o r S i n g l e O b j e c t Tr y(h m t x , 0);TryE n t e r C r i t i c a l S e c t i o n(& c s);任意等待Wa i t F o r S i n g l e O b j e c t(h m t x , d w M i l l i s e c o n d s);不能释放R e l e a s e M u t e x(h m t x);L e a v e C r i t i c a l S e c t i o n(& c s);是否能够等待其他内核对象是(使用Wa i t F o r M u l t i p l e O b j e c t s或类似的函数)




1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 
2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 
3、信号量:为控制一个具有有限数量用户资源而设计。 
4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。 

用自己的语言总结一下, 


互斥量是信号量的一个特例,信号量的引用计数为n,而互斥量为1,信号量有一个等待队列,当信号量引用计数大于0时就唤醒等待队列上的线程可以访问资源; 


临界区是你需要用信号量,互斥量或锁保护的一段代码,避免多个线程并发的访问处于同一个临界区中的资源; 


事件有可中断和不可中断事件,主要用于唤醒睡眠中的线程好像是这样的,记不清了
【Unity】【Photon】Photon Fusion2 中的网络同步对象(NetworkObject)学习笔记 本文是Unity的Photon Fusion2 中最重要的概念之一:网络同步对象(NetworkObject)的学习笔记。 阅读详情

相关推荐

线程同步(同步对象、同步访问对象)

在多线程的情况下,如果存在多个线程要使用同一个资源的情况时,则需要在线程之间进行协调(同步)才能使程序完成预定的工作,而不会出现灾难性的冲突。

无幻 7700

java核心技术:面向对象编程电子版第三卷

java核心技术:面向对象编程电子版第三卷

同步对象

http://blog.youkuaiyun.com/qunbinyue/article/details/1491146 Windows共设置了4种主要的同步对象,分别是临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)和事件(Event)。MF

camelisi的专栏 615

泛微Ecology流程数据表结构解析:workflow_requestbase和workflow_currentoperator到底怎么关联查询?

本文深入解析泛微Ecology系统中workflow_requestbase和workflow_currentoperator表的结构与关联机制,提供SQL查询语句示例,帮助开发者高效查询流程数据。涵盖待办事项、已办事项、办结事项和流程监控等典型场景,并分享性能优化技巧和常见问题排查指南。

weixin_33738555的博客 807

碳酸钙岩石酸蚀酸溶COMSOL建模:非均质对酸蚀通道的影响

多孔介质中的流动与化学反应耦合是石油工程和地下资源开发中的核心问题,酸液与岩石矿物的溶蚀过程直接关系到酸化增产效果。在碳酸盐岩储层中,盐酸与方解石的反应速率极快,酸液会优先沿高渗透区域推进,形成指状酸蚀通道,即wormhole。传统均质模型难以描述这种局部溶蚀行为,而数值模拟工具COMSOL通过耦合达西定律、稀物质传递与孔隙度演化方程,能够定量刻画酸蚀路径与渗透率的变化规律。工程实践中,模拟结果可用于预测酸液突破体积、优化注入排量,并为基质酸化方案设计提供依据。本文围绕碳酸钙岩石酸蚀酸溶COMSOL模型,探

weixin_29009401的博客 327

java 同步对象_Java代码质量改进之:同步对象的选择

在Java中,让线程同步的一种方式是使用synchronized关键字,它可以被用来修饰一段代码块,如下:synchronized(被锁的同步对象) {//代码块:业务代码}当synchronized被用来修饰代码块的时候表示,如果有多个线程正在执行这段代码块,那么需要等到其中一个线程执行完毕,第二个线程才会再执行它。但是!如果被锁的同步对象没有被正确选择的话,上面的结论是不正确的哦。到底什么样的...

weixin_29117669的博客 254

TDDFT计算软件Octopus学习笔记(二):基态计算(Si)

本文以硅为例,来进行基态计算。

陈啸的博客 7305

JAVA系列:Synchronized同步方法、类、对象、static

目录 同步方法 类 对象 static方法 demo 在sychronized里面的是同步进行的代码。在不sychronized里面的是可以异步进行的。 同步方法 1 同一个类中的有多个同步方法,同步锁定的是this,而不是单个方法。同步方法,锁定的是this 。 2 同一个对象内部的多个synchronized方法可以相互调用 类 Synchronizedstatic静态方法和 Synchronized (Class)是一样的效果 对象 同步某个对...

NIO4444 1359

非凸问题的求解方法以及连续凸逼近SCA(Successive Convex Approximation)方法

非凸问题的求解方法 针对形如下式的函数: min⁡x∈XV(x)=F(x)+G(x)\min\limits_{{\bf{x}}\in X} V(x)=F(x)+G(x)x∈Xmin​V(x)=F(x)+G(x); 其中F为光滑的(不一定convex),G是convex的但是可能不可微,且存在:对于n维实矢量空间,有X=X1×...×XNX=X_1 \times...\times X_NX=X1​×...×XN​; x=(x1,...,xN)\bf{x} =(x_1,...,x_N)x=(x1​,...,xN

weixin_44535200的博客 2万+

离合器KP点自学习:从原理到工程实践的全景解析

本文全面解析了离合器KP点自学习的原理与工程实践,详细介绍了KP点的物理本质、控制价值及自学习方法。通过扭矩增量式和转速变化式学习法,结合不同变速箱构型的适配策略,提升离合器控制的精度与效率。文章还探讨了液压系统迟滞补偿和摩擦材料老化应对方案,为工程实践提供可靠保障。

weixin_33717117的博客 287

同步注意事项--类和对象的不同级别同步

类同步和对象同步的区别理解类和对象的区别------------------------------------------------------------类可以有一组实例(类对象)对象只是一个实例(类的实例)------------------------------------------------------------类级别的同步,   保证该类所有实例对象,使用临界资源时同步 

feiwei的专栏 2502

安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案

本文主要介绍了安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案,希望能对使用Windows WSL的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 9万+

windows同步对象小结

windows同步对象小结        在windows平台下,用于对多线程(包括进程)之间的同步保护机制,基本上有这么几种: 1)Critical Section对象 2)Event对象 3)Mutex对象 4) Semaphore对象。网上已经有很多的文章在介绍这些对象是怎么使用的。本文的着眼点在于:总结出这些同步保护机制的一些明显的行为特征,而这些行为特征,也是我们再写程序时经常会

jfkidear的专栏 741

USB_TYPE-C 母座电路设计

本文详细介绍了USB Type-C接口(C2765186)的电路设计要点,重点解析了电源、识别和数据三部分的关键连接方案。电源部分需并联VBUS和GND引脚并加宽走线以承载3A电流;识别部分必须为CC1/CC2引脚配置5.1kΩ±1%精度的下拉电阻,这是触发PD充电的核心条件;数据部分通过短接正反插引脚实现盲插功能。文档还提供了完整的引脚对照表,并强调PCB布局需注意ESD防护、差分走线阻抗控制等要点,为Type-C接口设计提供了实用指导。

在读研究生,FPGA电路设计与功能开发。 582

软考高级信息系统项目管理师系列论文之:百篇软考高级信息系统项目管理师论文范文

软考高级信息系统项目管理师系列论文之:百篇软考高级信息系统项目管理师论文范文

zhengzaifeidelushang的博客 3579

AJAX学习总结(二)

异步对象 VS 同步对象 直白的来说: 异步对象 -- 同时干很多事情 同步对象 -- 一件事一件事的干 //1. 创建 异步对象 var xhr = new XMLHttpRequest(); //2.设置请求行 (get请求 数据写在url后面) //xhr.open(参数1,参数2,参数3) //使用同步模式来发送请求 //参数3 是否使用异步,**默认是 ture(异步...

阿尤的甜崽的博客 219

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Windows的4种主要的同步对象(原)

同步对象Windows共设置了4种主要的同步对象,分别是临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)和事件(Event)。MFC封装了它们,分别是类CCriticalSection、CMutex、CSemaphore和CEvent,它们都以CSyncObject为基类。1、临界区(1)创建:CCriticalSection myCritical

893

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Python中线程与进程

一 概念 进程 线程 进程与线程的关系 并行与并发 同步与异步 二 Python全局解释器锁GIL 三 threading模块 threading类直接创建 thread类继承方式创建 join 和 setDaemon 四 锁 五 递归锁 六 同步对象 七 信号量 八 线程队列 九 生产者消费者模型 十 多进程调用 process类的使用 十一 进程间通信 进程队列Queue 管道 manager

Techml的博客 5250

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

c++11 线程

介绍 本文旨在帮助有经验的Win32程序员来了解c++ 11线程库及同步对象 和 Win32线程及同步对象之间的区别和相似之处。 在Win32中,所有的同步对象句柄(HANDLE)是全局句柄.它们可以被共享,甚至可以在进程间复制。在C++11中,所有的同步对象都是栈(stack)对象,这意味着它们必须是可“分离(detached)”的(如果支持“分离”的话)以便能够被栈框架(stack

freeemma2011的博客 430

获取已知窗口名称即Caption的句柄-获取窗口句柄. HWND句柄和HANDLE这两者的区别是什么?

CString str1;  HWND hBtnClose;  HWND hWnd = ::FindWindow(NULL, _T("窗口名称"));  str1.Format(_T("%d"), hWnd);  MessageBox(str1);

jerrylii2012的博客 1147

c++11 线程:让你的多线程任务更轻松

英文原文:C++ 11 Threading: Make your (multitasking) life easier 介绍 本文旨在帮助有经验的Win32程序员来了解c++ 11线程库及同步对象 和 Win32线程及同步对象之间的区别和相似之处。 在Win32中,所有的同步对象句柄(HANDLE)是全局句柄.它们可以被共享,甚至可以在进程间复制。

Never too late to study 1561

CreateEvent

CreateEvent CreateEvent的用法HANDLE     CreateEvent(           LPSECURITY_ATTRIBUTES     lpEventAttributes,     //     SD           BOOL     bManualReset,    

danhu的专栏 3428

并发并行与同步异步的概念

1、同步锁 2、死锁、递归锁 3、信号量和同步对象(了解) 4、队列。。。生产者消费者模型 5、进程 并发&并行 并发:是指系统具有处理多个任务(动作)的能力 并行:是指系统具有同时处理多个任务(动作)的能力 并行是并发的一个子集 同步与异步 同步:当进程执行到一个IO(等待外部数据)的时候-------等:同步 异步:当进程执行到一个IO(等待外部数据)的时候---...

weixin_30319153的博客 101

Java 多线程与并发编程

一、多线程 1、操作系统有两个容易混淆的概念,进程和线程。 进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。 线程:表示程序的执行流程,是CPU调度执行的基本单位;线程有自己的程序计数器、寄存器、堆栈和帧。同一进程中的线程共用相同的地址空间

xiangjai的专栏 965
上一篇: 设计模式之代理模式
下一篇: linux下gdb单步调试
htt9931
博客等级 码龄24年 43粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值