gpt4 book ai didi

c++ - std :shared_ptr in libstdc++ correct 的原子交换是怎样的

转载 作者:搜寻专家 更新时间:2023-10-31 00:28:24 24 4
gpt4 key购买 nike

基于 libstdc++ 的原子交换实现 (https://gcc.gnu.org/ml/libstdc++/2014-10/msg00154.html):

看起来有 16 个互斥量是静态分配的。当需要进行原子交换时,交换代码将要交换的 2 个指针散列到这些静态互斥体、锁和交换中的一个(或两个)。但是,如果 shared_ptr 在线程之间共享并且被并发访问,互斥锁如何帮助保证并发访问和修改的同步?我猜代码假定内部原始指针正确对齐,但这是 x86 规则,而不是 C++ 保证。我错过了什么使交换成为原子的和正确的,而无需为底层原始指针的每次读取额外锁定?

最佳答案

libstdc++ 不必在所有 平台上工作。它只需要在它运行的平台上运行。

在它无法运行的平台上,它不是标准库的实现。使用不同的。

只要人们安装和“使用”(将其连接到编译器环境)libstdc++(编译器维护者通常)在使用它之前检查他们的平台假设,这里就没有问题。

通常,您不能以完全独立于平台的方式实现std 库。您甚至无法以独立于编译器的方式实现它,因为如果没有 std 库支持,std 需要做的某些事情无法在 C++ 中完成。

关于c++ - std :shared_ptr in libstdc++ correct 的原子交换是怎样的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306461/

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