繁体   English   中英

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

[英]How to use std::shared_mutex on Vista/Server 2008?

这是TryAcquireSRWLock *和_WIN32_WINNT的后续问题

看起来Windows SDK 8.1和更高版本(至少到当前的版本至少为10.0.16299.0)中存在错误,从而使TryAcquireSRWLockSharedTryAcquireSRWLockExclusive方法可用于面向Windows Vista或Windows Server 2008的编译。这会导致包含对这些方法的调用的应用程序由于它们最终只能从Windows 7或Windows Server 2008 R2开始使用,因此无法在Windows Vista或Windows Server 2008上执行。

似乎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为目标?

我想你做不到 但是您可以使用其他实现。 boost::shared_mutex 或者,如果您使用的是Qt,则可以使用QReadWriteLock。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM