![](/img/trans.png)
[英]How to use shared_mutex for objects in std::vector elements
[英]How to use std::shared_mutex on Vista/Server 2008?
这是TryAcquireSRWLock *和_WIN32_WINNT的后续问题
看起来Windows SDK 8.1和更高版本(至少到当前的版本至少为10.0.16299.0)中存在错误,从而使TryAcquireSRWLockShared和TryAcquireSRWLockExclusive方法可用于面向Windows Vista或Windows Server 2008的编译。这会导致包含对这些方法的调用的应用程序由于它们最终只能从Windows 7或Windows Server 2008 R2开始使用,因此无法在Windows Vista或Windows Server 2008上执行。
似乎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为目标?
我想你做不到 但是您可以使用其他实现。 有boost::shared_mutex
。 或者,如果您使用的是Qt,则可以使用QReadWriteLock。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.