秒杀多线程第八篇经典线程同步信号量semaphore 多线程 锁 信号量

在CSDN上看到MoreWindows关于多线程的专题觉得蛮不错的。不过写到互斥量之后就没有再更新了,觉得有点可惜了,索性就来个狗尾续貂,用抛砖引玉的形式续写一下后面的章节吧

信号量内核对象用来对资源计数。与其他所有内核对象相同,它们也包含一个使用计数,但它们还包含另外两个32位值:一个最大资源和一个当前资源计数。最大资源技术表示信号量可以控制的最大资源,当前资源技术表示当前可用资源。

信号量的规则如下:

(1)如果当前资源计数大于0,那么信号量处于触发状态

(2) 如果当前资源计数等于0,那么信号量属于未触发状态

(3)系统绝对不会让当前资源计数变为负数

(4)当前资源计数绝对不会大于最大资源计数

-------摘自《Windows核心编程》

Semahpore主要用到四个函数:

第一个CreateSemaphore

函数功能:创建信号量

函数原型:

HANDLECreateSemaphore(

PSECURITY_ATTRIBUTEpsa,

LONGlInitialCount,

LONGlMaximumCount,

PCTSTRpszName

);

函数说明:

 psa安全控制,一般传入NULL

lInitialCount设置信号量的初始计数

  lMaximumCount 设置信号量的最大计数

  lpName指定信号量对象的名称

第二个OpenSemaphore

函数功能:为现有的一个已命名信号机对象创建一个新句柄

函数原型:

HANDLEOpenSemaphore(

DWORDdwDesiredAccess,

BOOLbInheritHandle,

PCTSTR pszName

);

函数说明:

dwDesiredAccess,下述常数之一:

  SEMAPHORE_ALL_ACCESS要求对事件对象的完全访问;

  SEMAPHORE_MODIFY_STATE允许使用ReleaseSemaphore函数;

  SYNCHRONIZE允许同步使用信号机对象。

  bInheritHandle,如果允许子进程继承句柄,则设为TRUE。

  lpName,指定要打开的对象的名字。

第三个ReleaseSemaphore

函数功能:递增信号量的当前资源计数

函数原型:

HANDLEReleaseSemaphore(

HANDLEhSemaphore,

LONGlReleaseCount,

PLONGplPreviousCount

);

函数说明:

hSemaphore 信号量句柄

lReleaseCount 把lReleaseCount的值增加到当前资源技术上

plPreviousCount返回当前资源计数的原始值

第四个CloseHandle

清理信号量CloseHandle()

用信号量解决专栏提出的那个线程同步的问题有点大材小用了,不过依然可以完善的解决。基本思想就是设置一个最大资源数为1的信号量,初始时资源为0,主线程CreadThread后调用WaitSingleObject来等待信号量触发,子线程启动后操作完成需要工作后调用ReleaseSemaphore函数,将资源数增加到1信号量被触发。当WaitSingleObject调用后,资源会减1,资源数重新变成0。

代码如下:



运行结果如下图:


秒杀多线程第八篇经典线程同步信号量semaphore 多线程 锁 信号量

  

爱华网本文地址 » http://www.413yy.cn/a/25101018/370904.html

更多阅读

第254篇经典再读《廊桥遗梦》小说全文 国学经典大学全文

廊桥遗梦    开篇  从开满蝴蝶花的草丛中,从千百条乡间道路的尘埃中,常有关不住的歌声飞出来。本故事  就是其中之一。一九八九年的一个秋日,下午晚些时候,我正坐在书桌前注视着眼前电脑荧屏  上闪烁的光标,电话铃了。 

第八篇极度冰寒新藏线 新藏线骑行

新藏线地图一、天路  成功的完成了珠峰之行,无疑将给我接下来独闯新藏线建立了强大的信心。不过信心归信心,这样的信心也只是建立在自己身上。人都是比较虚荣的,在做一件事前总希望得到别人的肯定,如果肯定的人越多你就觉得希望越大,

回忆我的人生道路:之89第八篇、在泰来监狱从警岁月

回忆我的人生道路:之89八、在泰来监狱从警岁月八.一、初到泰来监狱1980年7月30日傍晚,我怀着依依不舍的心情,眼含热泪告别了母校,昔日在学校时的激情荡然无存,若有所失的独自来到了哈尔滨火车站,并买到了一张去往黑龙江省泰来县的火车

第八篇—自我管理 管理学经典案例20篇

一、自我基本解释:①精神的我,由个人目标、抱负和信念等组成②物质的我,指个人的身体及其属性③现实的我,自己的喜好、性格和观点④社会的我,即他人所看到的我⑤综合、真实的“自我”二、自我认识:1、Why——*自我引导:个人需要按照

声明:《秒杀多线程第八篇经典线程同步信号量semaphore 多线程 锁 信号量》为网友无声剧本分享!如侵犯到您的合法权益请联系我们删除