用户模式同步之互斥体小解

1.互斥体(互斥体类似于同步事件)
互斥体可避免多个线程争夺一个资源的问题,多线程环境下,如果一个线程获得互斥体,不释放的话其他的线程就获得不了该资源
它与同步事件的区别:
是在同一个线程内它可以递归获得互斥体,也就是这个线程获得互斥体后对再次去获得认可不排斥,同步我们显而易见的得知不允许这样
他有激发未激发两种状态,记住!!!获得互斥体是未激发状态,释放互斥体是激发状态,他和信号量区别清楚
同样使用它首先要初始化;CreateMutex(SECURITY,BOOL(是否被占有),LPCTSTR(name)),获得互斥体的函数是WAIT系列的等待函数
ReleaseMutex是释放互斥体
第二参数为FALSE是没有占有,是激发状态,反之为未激发状态
记住是在一个互斥体被一个线程获得后必须释放才能下一个获得和自旋锁原理一样

2. 对于等待函数的解释

原文地址:https://www.cnblogs.com/L-Sunny/p/8443426.html

时间: 2024-11-08 18:51:15

用户模式同步之互斥体小解的相关文章

用户模式同步之信号量小解

3.信号灯(重点是记住什么样是激发什么样称为未激发)信号灯有两种状态,激发和未激发状态,信号灯内部有个计数器,可以理解信号灯内部有N个灯泡,如果有一个灯泡亮着,表示信号灯处于激发状态,如果全部熄灭,信号灯就是处于未激发状态同样的信号灯的使用也需要初始化它利用的是CreateSemaphore(SECURITY,LONG(初始化计数个数),LONG(计数器最大个数).LPCTSTR(NAME))第二个参数表示在初始化的时候计数器的值为多少,第三个参数为信号灯的计数器最大值是多少,如果初始值为0则是

用户模式同步之事件小解

事件(和WaitForSingleObject等待函数配套)如果我们要用事件一定记住的是利用CreateEvent(LPSECURITY,BOOL(手动or自动),BOOL(初始状态),LPCTSTR(NAME)) 初始化事件对于第二参数的手动还是自动选择自动就行,因为手动的话遇到WaitForSingleObject的时候还得自己设置变成未激发状态,自动的话当遇到WaitForSingleObject会自动变为未激发状态一般思路:1.初始化事件,2.事件返回的句柄作为参数传入线程3.然后在线程

[转载] 《重要》内核下各种同步处理方法(自旋锁、信号灯、互斥体…)

本文转载自: http://www.blogfshare.com/kernel-synchronization.html 1.在支持多线程的操作系统下,有些函数会出现不可重入的现象.所谓“可重入”是指函数的执行结果不和执行顺序有关.反之如果执行结果和执行顺序有关,则称这个函数是“不可重入”的. 2.Windows将中断的概念进行了扩展,提出一个中断请求级(IRQL)的概念.其中规定了32个中断请求级别,分别是0~2级别为软件中断,3~31级为硬件中断,其中数字从0~31,优先级别逐次递增. 在内

同步 互斥体和信号量

1.互斥体和信号量都是为了实现同步,但是二者解决的问题不一样,也就是说应用场景不一样. 2.互斥体通过加锁,对于共享的资源,大家排队,依次去访问,一个一个来.也就是说,任何时刻只有一个线程访问,其他的线程等待. 3.互斥体加锁存在的问题:无法控制线程的访问顺序.考虑两个线程A,B,访问顺序可能是A-B,也可能是B-A,就要看谁先加锁. 4.考虑下面的场景,生产者/消费者模式,假定A是生产者,B是消费者,生产一个,消费一个,循环下去,这样就要求访问顺序必须是A-B-A-B... 5.怎么解决这个问

生产者与消费者模式(线程的同步与互斥)

死锁产生的四个条件: 1.互斥使用(资源独占) 一个资源每次只能给一个进程使用 .2.不可强占(不可剥夺) 资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放 .3.请求和保持(部分分配,占有申请) 一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配) .4.循环等待 存在一个进程等待队列 {P1 , P2 , - , Pn}, 其中P1等待P2占有的资源,P2等待P3占有的资源,-,Pn等待P1占有的资源,形成一个进程等待环路 生产者:生产数据

线程同步——用户模式下线程同步——Interlocked实现线程同步

1 线程同步分为用户模式下的线程同步和内核对象的线程同步. 2 3 当然用户模式下的线程同步实现速度比内核模式下快,但是功能也有局 4 5 6 7 8 //1.利用原子访问: Interlocked系列函数,关于Interlocked系列函数,我需要知道的是他们,执行的极快 9 10 //(1)首先是InterlockedExchangeAdd兄弟函数, 11 //第一个参数 Addend 代表进行操作数的地址, 12 //第二个参数 Value 代表增加的值,如果是想进行减法,传负数即可 13

线程同步——用户模式下线程同步——Slim读写锁实现线程同步

1 //Slim读/写锁实现线程同步 2 SRWlock 的目的和关键段相同:对同一资源进行保护,不让其它线程访问. 3 但是,与关键段不同的是,SRWlock允许我们区分哪些想要读取资源的线程(读取者线程) 4 和哪些想要更新资源值的线程(写入者线程).让所有读取者资源在同一时刻访问共享资源应该是 5 可行的,这是因为仅仅读取资源并不存在破坏数据的风险.只有当写入者线程想要对资源进行更新时才需要同步. 6 这种情况下,写入者线程应该独占资源访问权:任何线程,无论是读取还是写入者线程,都不许访问

线程同步——用户模式下线程同步——关键段实现线程同步

1 //2.使用关键段实现线程同步 2 使用时必须有以下几个步骤 3 //(1)必须先定义 CRITICAL_SECTION 结构 4 CRITICAL_SECTION g_cs; 5 //(2)初始化关键段 CRITICAL_SECTION 6 InitializeCriticalSection(&g_cs); 7 //(3)在线程中调用 8 DWORD WINAPI ThreadFunOne(PVOID pvParam) 9 { 10 EnterCriticalSection(&g_c

Windows核心编程笔记(6)----用户模式下的线程同步

1.原子锁 使用InterlockedExchangeAdd函数来实现原子增长,InterlockedExchange\InterlockedExchangePointer用来交换两个变 量的值,InterlockedCompareExchange对比数值,相等则交换(对应的InterlockedCompareExchangePointer).对应的 还有64位函数. InterlockedIncrement\InterlockedDecrement是比较老的函数,只能增加或递减1,Interl