如何在Vista / Server 2008上使用std :: shared_mutex?

时间:2018-03-16 16:47:16

标签: c++ windows winapi c++17

这是TryAcquireSRWLock* and _WIN32_WINNT

的后续问题

因为看起来Windows SDK 8.1及更新版本(至少是当前的10.0.16299.0)存在错误,因此方法TryAcquireSRWLockSharedTryAcquireSRWLockExclusive可用于针对Windows Vista或Windows的编辑Server 2008.这会导致包含对这些方法的调用的应用程序无法在Windows Vista或Windows Server 2008上执行,因为它们最终只能从Windows 7或Windows Server 2008 R2开始提供。

Windows SDK 8.1中std::shared_mutex的实现似乎使用了TryAcquireSRWLockSharedTryAcquireSRWLockExclusive。因此,使用std::shared_mutex会导致应用程序无法在Windows Vista或Windows Server 2008上执行。

文档还说明了

  

警告

     

从Visual Studio 2015开始,即C ++标准库   同步类型基于Windows同步原语   并且不再使用ConcRT(目标平台是Windows时除外)   XP)。 < shared_mutex>中定义的类型不应该与任何人一起使用   ConcRT类型或函数。

然而,当使用平台工具集v140_xp时,编译器抱怨完全不知道std::shared_mutex

如何使用std::shared_mutex并仍定位Windows Vista或Windows Server 2008?

1 个答案:

答案 0 :(得分:1)

我认为你不能。但是您可以使用其他实现。有boost::shared_mutex。或者,如果您使用的是Qt,则可以使用QReadWriteLock。