这是一个后续问题TryAcquireSRWLock* 和 _WIN32_WINNT https://stackoverflow.com/q/49317541/
Windows SDK 8.1 及更高版本(至少当前的 10.0.16299.0)中似乎存在一个错误,使得这些方法尝试获取SRWLockShared https://technet.microsoft.com/en-us/library/dd405524.aspx and 尝试获取SRWLockExclusive https://msdn.microsoft.com/en-us/library/windows/desktop/dd405523(v=vs.85).aspx可用于针对 Windows Vista 或 Windows Server 2008 的编译。这会导致包含对这些方法的调用的应用程序无法在 Windows Vista 或 Windows Server 2008 上执行,因为它们最终只能从 Windows 7 或 Windows Server 2008 R2 开始使用。
看来实施std::shared_mutex https://learn.microsoft.com/en-us/cpp/standard-library/shared-mutex在 Windows SDK 8.1 中使用尝试获取SRWLockShared https://technet.microsoft.com/en-us/library/dd405524.aspx and 尝试获取SRWLockExclusive https://msdn.microsoft.com/en-us/library/windows/desktop/dd405523(v=vs.85).aspx。因此使用std::shared_mutex https://learn.microsoft.com/en-us/cpp/standard-library/shared-mutex导致应用程序无法在 Windows Vista 或 Windows Server 2008 上执行。
该文档还指出
Warning
从 Visual Studio 2015 开始,C++ 标准库
同步类型基于 Windows 同步原语
并不再使用ConcRT(除非目标平台是Windows
XP)。 中定义的类型不应与任何
ConcRT 类型或函数。
但是,当使用平台工具集 v140_xp 时,编译器抱怨不知道std::shared_mutex https://learn.microsoft.com/en-us/cpp/standard-library/shared-mutex at all.
我该如何使用std::shared_mutex https://learn.microsoft.com/en-us/cpp/standard-library/shared-mutex并且仍以 Windows Vista 或 Windows Server 2008 为目标?
我认为你不能。但您可以使用替代实现。有boost::shared_mutex
。或者,如果您使用的是 Qt,则可以使用 QReadWriteLock。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)