gpt4 book ai didi

c++ - C++17 std::shared_mutex 还不可用吗?

转载 作者:可可西里 更新时间:2023-11-01 18:26:15 30 4
gpt4 key购买 nike

查看C++ compiler support , 看来 std::shared_mutex 的未计时版本在 GCC 5.0+ 中可用。但是,即使使用 gcc version 5.3.0 20151204 (Ubuntu 5.3.0-3ubuntu1~14.04) , 并用 -std=c++1z 编译,共享互斥体的简单初始化以:

error: ‘shared_mutex’ in namespace ‘std’ does not name a type
std::shared_mutex mutex_;

不,我已经包含了正确的 header :#include <shared_mutex> .

它找不到正确的 header ,因为它似乎不存在。 实际上,链接器使用位于 /usr/include/c++/5/shared_mutex 的库。 ,其中仅包含 std::shared_timed_mutex 的实现(类似于 C++14 标准)。

我通过在 ppa:ubuntu-toolchain-r/test 添加存储库安装了 gcc-5 和 g++-5并使用 update-alternatives正确设置垃圾箱。

我可以做些什么来使用最新的 C++17 标准正确编译我的代码吗?这可能是一个愚蠢的问题,但现在开始使用 -std=c++1z 是否为时过早?即使它应该已经被支持了?因为它受支持,对吧?

最佳答案

cppreference 的困惑可能是因为 std::shared_mutex 确实 添加到 GCC 5.0,在 revision 200134 中.但那是基于 C++1y 草案的该类型的早期版本。事实上,它是 timed 共享互斥量,当时称为 std::shared_mutex

在最终的 C++14 标准发布之前,std::shared_mutex 被重命名为 std::shared_timed_mutex,因此在 GCC 5.1 发布之前(这是5.x 系列中的第一个版本)libstdc++ 中的类型已重命名,请参阅 revision 207964 .

因此,虽然在 GCC 5.x 预发布阶段的某一时刻有一个 std::shared_mutex 类型,但它不是 C++17 未计时的类型,它被重命名了在出现在 GCC 的任何官方版本中之前。

然后,在 GCC 6.x 发布系列的开发过程中,添加了 C++1z 不定时共享互斥锁,重用了 std::shared_mutex 名称。那就是提交 T.C.链接到上面的评论,revision 224158 .

因此 C++17 untimed shared_mutex 从未出现在任何 GCC 5.x 版本中。在第一个 5.x 版本之前的一小段时间里,有一个名为 std::shared_mutextimed,但在所有适当的 5.x 版本中它被称为 std::shared_timed_mutex

第一个发布 C++17 未计时版本的版本是 2016 年 4 月的 6.1,因此对于之后的任何 GCC 版本,您都可以使用 std::shared_mutex(只要您启用 C+ +17 在编译器中,例如使用 -std=gnu++17-std=c++17 标志)。

GCC 5 于 2015 年发布,因此期望能够在该版本中使用 C++17 有点不现实。 GCC 6.x 和 7.x 有很好的 C++1z 支持(当然,只是基于发布时的当前草稿)。

关于c++ - C++17 std::shared_mutex 还不可用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36222912/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com