引用 8 楼 houpk345 的回复:引用 7 楼 wizardk 的回复: 引用 6 楼 houpk345 的回复:终于知道问题在哪里了,原来是没了解WaitForSingleObject函数,非常感谢! 但还有一个问题,那互斥是不是应该是1,1信号量?WaitForSingleObject遇到初始值为0的信号量不阻塞吗?UNIX中的P操作-1 <0是阻塞啊... 呵呵,我说的0,1的意思是信号量的值的表示范围是[0,1],不是说初始化的时候为0 呵呵,非常感谢,我还有一个问题向讨教,有线程1,线程2,线程3三个线程,如果要求线程3在线程1和线程2都执行完之后才能执行,如何实现?我本来的想法是: HANDLE hSemaphore; hSemaphore = CreateSemaphore(NULL,-1,1,NULL); 线程1: ReleaseSemaphore(); ...... 线程2: ReleaseSemaphore(); ...... 线程3: WaitForSingleObject(hSemaphore, INFINITE); ...... 但是发现信号量的初始值不能设为-1...... 信号量的初始值不能小于0 你的这个情况没必要用信号量,可以用事件的方式,理解上更清晰,非要用也可以: HANDLE hSemaphore; hSemaphore = CreateSemaphore(NULL,0,2,NULL); 线程1: ReleaseSemaphore(); ...... 线程2: ReleaseSemaphore(); ...... 线程3: WaitForSingleObject(hSemaphore, INFINITE); WaitForSingleObject(hSemaphore, INFINITE);// two times ...... 建议你也可以参考下我的这个帖子:http://topic.csdn.net/u/20100308/16/7102875a-9103-494a-b1d0-253f1a1eba2e.html
引用 7 楼 wizardk 的回复: 引用 6 楼 houpk345 的回复:终于知道问题在哪里了,原来是没了解WaitForSingleObject函数,非常感谢! 但还有一个问题,那互斥是不是应该是1,1信号量?WaitForSingleObject遇到初始值为0的信号量不阻塞吗?UNIX中的P操作-1 <0是阻塞啊... 呵呵,我说的0,1的意思是信号量的值的表示范围是[0,1],不是说初始化的时候为0 呵呵,非常感谢,我还有一个问题向讨教,有线程1,线程2,线程3三个线程,如果要求线程3在线程1和线程2都执行完之后才能执行,如何实现?我本来的想法是: HANDLE hSemaphore; hSemaphore = CreateSemaphore(NULL,-1,1,NULL); 线程1: ReleaseSemaphore(); ...... 线程2: ReleaseSemaphore(); ...... 线程3: WaitForSingleObject(hSemaphore, INFINITE); ...... 但是发现信号量的初始值不能设为-1......
引用 6 楼 houpk345 的回复:终于知道问题在哪里了,原来是没了解WaitForSingleObject函数,非常感谢! 但还有一个问题,那互斥是不是应该是1,1信号量?WaitForSingleObject遇到初始值为0的信号量不阻塞吗?UNIX中的P操作-1 <0是阻塞啊... 呵呵,我说的0,1的意思是信号量的值的表示范围是[0,1],不是说初始化的时候为0
终于知道问题在哪里了,原来是没了解WaitForSingleObject函数,非常感谢! 但还有一个问题,那互斥是不是应该是1,1信号量?WaitForSingleObject遇到初始值为0的信号量不阻塞吗?UNIX中的P操作-1 <0是阻塞啊...
用事件实现互斥过程如下: HANDLE hEvent; hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); SetEvent(hEvent); 线程一: WaitForSingleObject(hEvent, INFINITE); ResetEvent(hEvent); .... SetEvent(hEvent); 线程二: WaitForSingleObject(hEvent, INFINITE); ResetEvent(hEvent); .... SetEvent(hEvent); 但用信号量只有ReleaseSemaphore,岂不是类似于上面的只有ResetEvent而没有SetEvent,能举例说明吗?
引用 1 楼 wizardk 的回复: UNIX的信号量和WINDOWS的信号量有本质上的区别吗? 如果你要互斥,就设置为0,1的信号量即可 那怎么实现减少信号量计数的值?
UNIX的信号量和WINDOWS的信号量有本质上的区别吗? 如果你要互斥,就设置为0,1的信号量即可
15,471
社区成员
49,182
社区内容
加载中
试试用AI创作助手写篇文章吧