【问题标题】:CreateMutex in two different programs, same handle (gcc)CreateMutex 在两个不同的程序中,相同的句柄(gcc)
【发布时间】:2011-09-19 07:07:00
【问题描述】:

我编写了两个通过 tcp 进行通信的程序。这两个程序原则上是相同的。 在我通过 tcp 发送它们之前,这些消息存储在一个内部缓冲区中。我使用互斥锁来保护此缓冲区以进行同时读/写。 为了测试,我确实在同一台电脑上运行了这两个程序并且遇到了一些时间问题。我发现 CreateMutex 总是在两个程序上返回相同的句柄,所以一个程序阻塞了另一个程序!

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

我为互斥锁使用哪个名称并不重要,在两个程序上它总是相同的。我做错了什么?

【问题讨论】:

    标签: windows winapi mutex


    【解决方案1】:

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

    在您的情况下,您可能可以使用关键部分而不是互斥锁 - 它基本上是一个更轻量级的版本,只能在进程中使用。

    【讨论】:

    • 是否将名称设置为 NULL 没有任何区别。当我第一次调用WaitForSingleObject 时,使用bInitialOwner = TRUE 我的程序被阻止。 (也许我应该先发布它?!)。但我已经切换到 CriticalSection 并且它现在正在工作。谢谢!
    猜你喜欢
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2019-08-25
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多