尝试使用Boost named_semaphore来使用Windows信号量API

时间:2015-06-23 14:12:51

标签: windows boost semaphore

我有使用Windows信号量API(CreateSemaphore等)的遗留应用程序,我正在编写一个新的多平台应用程序,我正在使用Boost库。

在Windows中使用默认的Boost构建,它会在文件系统中创建named_semaphore。

文件\ boost \ interprocess \ detail \ workaround.hpp似乎定义了我希望实现此目标的标志(通过定义WIN32并注释掉#define BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION)

以下是该文件的摘录:

#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) 
    #define BOOST_INTERPROCESS_WINDOWS
    // #define BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION
    #define BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME 
    //Define this to connect with shared memory created with versions < 1.54
    //#define BOOST_INTERPROCESS_BOOTSTAMP_IS_LASTBOOTUPTIME
#else

但是,单步执行Boost代码来创建此信号量(使用上面的定义)表明它仍然尝试在默认的共享目录中创建一个文件,这会在Boost尝试锁定它时导致异常。 / p>

有没有人知道这是否可以使用Boost(还是?)

非常感谢,凯文

1 个答案:

答案 0 :(得分:0)

Windows同步生命周期保证不是POSIX,这是Boost Interprocess实现的。所以,不,这是不可能的。