我有使用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(还是?)
非常感谢,凯文
答案 0 :(得分:0)
Windows同步生命周期保证不是POSIX,这是Boost Interprocess实现的。所以,不,这是不可能的。