社区
进程/线程/DLL
帖子详情
关于WaitForSingleObject信号量的问题
tonyyang8848
2015-05-28 10:30:25
WaitForSingleObject(
HANDLE hObject, //指明一个内核对象的句柄
DWORD dwMilliseconds);
如果hObject被多个线程WaitForSingleObject调用,那么hObject是不是也需要用临界区来进行线程同步
...全文
623
5
打赏
收藏
关于WaitForSingleObject信号量的问题
WaitForSingleObject( HANDLE hObject, //指明一个内核对象的句柄 DWORD dwMilliseconds); 如果hObject被多个线程WaitForSingleObject调用,那么hObject是不是也需要用临界区来进行线程同步
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Saleayas
2015-05-29
打赏
举报
回复
她就是让多个线程来调用的。 那个线程获取她的使用权,就可以醒过来,否则就继续等待。
worldy
2015-05-29
打赏
举报
回复
内核对象,不需要另外再同步
redui
2015-05-29
打赏
举报
回复
hObject不需要临界区,但如果等待到信号后处理其他的任务可能需要临界区
zgl7903
2015-05-29
打赏
举报
回复
如果hObject也使用临界区, 那么这些等待的线程又都要访问到这个临界区, 那么临界区是不是也得再加临界区,临界区再加临界区…… 死循环了 WaitForSingleObject 在句柄无效时 会返回 WAIT_FAILED
shenyi0106
2015-05-29
打赏
举报
回复
多个线程调用时,一旦有信号,系统会择机选择一个等待着来唤醒。 至于谁会被唤醒,你最好还是去问微软 这是内核对象,不用同步,内核会帮你管理的妥妥的
线程同步机制代码,用c++写的,:使用Windows互斥
信号量
操作函数和同步机制的Peterson,实现进程互斥和同步
小实验一:编写一个没有线程同步机制的程序,调试程序,观察在执行程序的过程中,出现的
问题
并解答原因 小实验二:使用Windows互斥
信号量
操作函数解决上述线程并发
问题
,并分析、尝试和讨论线程执行体中有关
信号量
操作函数调用的正确位置 小实验三:根据同步机制的Peterson软件解决方案尝试自己编程实现线程同步机制和用于上述线程并发
问题
的解决,并基于程序运行时间长短将其与基于Windows互斥
信号量
的线程同步机制的效率展开比较。 实验要求:线程主体代码循环执行1000000次 试验一:没有线程同步机制 HANDLE thread[2]; 实验二::使用Windows互斥
信号量
操作函数 mutex = CreateMutex(NULL,FALSE,NULL);
Wait
For
Single
Object
(mutex,INFINITE); ReleaseMutex(mutex); 实验三:Peterson软件解决方案 void request ( int id )
CSemaphore
信号量
使用实例
用VS2008写的mfc工程,可编译。测试
信号量
CSemapaore在线程并发中的功能,并用到
Wait
For
Single
Object
()和ReleaseSemaphore()函数。
进程同步实验代码 图书馆 ,登记,注册使用 CreateMutex,
Wait
For
Single
Object
图书馆登记和注销 要求:有一阅览室,读者进入时必须先在一张登记表上登记。该表中每个表项代表阅览室中的一个座位。读者离开时要消掉其登记信息。阅览室共有50 个座位。登记表每次仅允许一位读者进行登记或注销。 本实验由两个进程组成,分别是登陆和注销进程 使用到的函数和
信号量
HANDLE mutex; HANDLE empty; HANDLE full; 创建
信号量
HANDLE CreateSemaphore( __in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,// lpSemaphoreAttributes是
信号量
的安全属性 可为NULL __in LONG lInitialCount,// lInitialCount是初始化的
信号量
__in LONG lMaximumCount,// lMaximumCount是允许
信号量
增加到最大值 __in_opt LPCWSTR lpName//lpName是
信号量
的名称 可为NULL ); 创建互斥
信号量
HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针 可为NULL BOOL bInitialOwner, // 初始化互斥对象的所有者 LPCTSTR lpName // 指向互斥对象名的指针 ); 申请一个资源
Wait
For
Single
Object
(HANDLE full,INFINITE); 释放资源 ReleaseSemaphore( __in HANDLE hSemaphore,// hSemaphore是要增加的
信号量
句柄 __in LONG lReleaseCount,// lReleaseCount是增加的计数。 __out_opt LPLONG lpPreviousCount//lpPreviousCount是增加前的数值返回。 ); 释放互斥
信号量
BOOL ReleaseMutex(HANDLE hMutex); DWORD
Wait
ForMultiple
Object
s( DWORD nCount, // number of handles in array CONST HANDLE *lpHandles, //
object
-handle array BOOL b
Wait
All, //
wait
option DWORD dwMilliseconds // time-out interval );
操作系统实训报告
进程的同步 1 实验目的和要求 目的:理解进程同步的原理和意义,掌握
信号量
的实现方法和应用。 要求: (1)使用EOS的
信号量
,实现生产者-消费者
问题
; (2)跟踪调试EOS
信号量
的工作过程,分析EOS
信号量
实现的源代码; (3)修改EOS
信号量
的实现代码,使之支持等待超时唤醒和批量释放功能。 2 完成的实验内容 2.1 使用EOS的
信号量
实现生产者-消费者
问题
(简要说明使用EOS的
信号量
解决生产者-消费者
问题
的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪、测试与思考等) EOS使用CreateThread函数创建线程,使用CreateMutex、CreateSemaphore 创建
信号量
。
Wait
For
Single
Object
与ReleaseMutex、ReleaseSemaphore函数相当于P、V原语。
操作系统 进程同步和互斥代码 os 奇偶数 (具体要求请看资源描述)
三个进程P1,P2,P3,以及有N(>1)个单元的缓冲区。P1调用produce()产生一个整数,调用put()将其放入缓冲区。P2调用getodd()从缓冲区取出一个奇数,然后调用countodd()计算奇数的个数;P2调用geteven()从缓冲区取出一个偶数,然后调用counteven()计算偶数的个数。用
信号量
机制实现进程同步 使用到的函数和
信号量
HANDLE mutex; HANDLE empty; HANDLE full; 创建
信号量
HANDLE CreateSemaphore( __in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,// lpSemaphoreAttributes是
信号量
的安全属性 可为NULL __in LONG lInitialCount,// lInitialCount是初始化的
信号量
__in LONG lMaximumCount,// lMaximumCount是允许
信号量
增加到最大值 __in_opt LPCWSTR lpName//lpName是
信号量
的名称 可为NULL ); 创建互斥
信号量
HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针 可为NULL BOOL bInitialOwner, // 初始化互斥对象的所有者 LPCTSTR lpName // 指向互斥对象名的指针 ); 申请一个资源
Wait
For
Single
Object
(HANDLE full,INFINITE); 释放资源 ReleaseSemaphore( __in HANDLE hSemaphore,// hSemaphore是要增加的
信号量
句柄 __in LONG lReleaseCount,// lReleaseCount是增加的计数。 __out_opt LPLONG lpPreviousCount//lpPreviousCount是增加前的数值返回。 ); 释放互斥
信号量
BOOL ReleaseMutex(HANDLE hMutex); DWORD
Wait
ForMultiple
Object
s( DWORD nCount, // number of handles in array CONST HANDLE *lpHandles, //
object
-handle array BOOL b
Wait
All, //
wait
option DWORD dwMilliseconds // time-out interval );
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章