随笔 - 741  文章 - 0  评论 - 260  阅读 - 416万

线程与内核对象的同步

线程与内核对象的同步
内核对象可以处于已通知或未通知状体
进程,线程,作业,文件,控制台输入,文件修改,事件,可等待定时器


等待函数
DWORD WaitForSingleObject(HANDLE hobject, DWORD dwMilliseconds);

同时查看若干个内核对象已通知状体
DWORD WaitForMultipleObjects(
DWORD dwCount,
CONST HANDLE* phObjects,
BOOL fWaitAll,
DWORD dwMilliseconds);
dwCount用于查看内核对象的数量1,MAXIMUM_WAIT_OBJECTS(64)
有两种方式,一种是有一个内核对象变为可通知态,另一个是等待所有变为可通知态。

成功等待的副作用
当一个对象的状体改变时,我们称之为成功等待的副作用。例如,有个线程正在带等自动清除事件,
当事件对象变为通知状态时,函数就会发现这个情况,并将WAIT_OBJECT_0返回给调用线程。但是就在
函数返回之前,该事件被置为未通知状体,这就是成功等待的副作用。进程线程对象没有副作用。
多个线程等待一个对象,该对象变为可通知状态哪个线程得到呢? “先进先出”的方案。

事件内核对象。
包含一个计数,一个自动重置,人工重置的bool值。人工重置的事件得到通知,等待该事件的所有
线程均变为可调度,自动重置,只有一个线程变为可调度。
HANDLE CreateEvent(
PSECURITY_ATTRIBUTES psa,
BOOL fManualReset,
BOOL fInitialState,
PCTSTR pszName);

posted on   莫水千流  阅读(180)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示