这是TryAcquireSRWLock* and _WIN32_WINNT
的后续问题因为看起来Windows SDK 8.1及更新版本(至少是当前的10.0.16299.0)存在错误,因此方法TryAcquireSRWLockShared和TryAcquireSRWLockExclusive可用于针对Windows Vista或Windows的编辑Server 2008.这会导致包含对这些方法的调用的应用程序无法在Windows Vista或Windows Server 2008上执行,因为它们最终只能从Windows 7或Windows Server 2008 R2开始提供。
Windows SDK 8.1中std::shared_mutex的实现似乎使用了TryAcquireSRWLockShared和TryAcquireSRWLockExclusive。因此,使用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?
答案 0 :(得分:1)
我认为你不能。但是您可以使用其他实现。有boost::shared_mutex
。或者,如果您使用的是Qt,则可以使用QReadWriteLock。