2011-09-19 63 views
0

我已经写了两个通过tcp交流的程序。这两个程序原则上是一样的。 消息在通过tcp发送之前存储在内部缓冲区中。我使用一个互斥锁来保护这个缓冲区,以便同时读/写。 为了测试,我在同一台电脑上运行了这两个程序,并且遇到了一些计时问题。我发现CreateMutex总是返回两个程序的相同句柄,所以一个程序阻塞另一个!CreateMutex在两个不同的程序中,相同的句柄(gcc)

hBufferMutex = CreateMutex(NULL,FALSE,"BufferMutex"); 

不要紧,我使用的名称互斥体,它总是在这两个程序是相同的。我究竟做错了什么?

回答

4

如果您只是在程序中使用互斥锁,请将匿名一组名称设置为NULL。名称实际上只用于当你想在两个程序之间进行通信(...在相同的登录会话中运行,这是默认的,或者同一台机器,如果使用'全局'前缀。)

在你的情况下,您可能能够使用临界区而不是互斥体 - 它基本上是一个更轻量级的版本,只能在进程中使用。

+0

而且,当然,用'bInitialOwner == TRUE'来调用它。 – MSalters

+0

如果我将该名称设置为NULL,它没有任何区别。并且'bInitialOwner = TRUE'我的程序在我第一次调用'WaitForSingleObject'时被阻塞。 (也许我应该先发布它?!)。但我已经切换到CriticalSection,它现在正在工作。谢谢! – Sascha

相关问题