【发布时间】:2016-02-17 23:47:00
【问题描述】:
标题几乎传达了所有相关信息,但这里有一个最小的复制:
#include <atomic>
#include <cstdio>
#include <memory>
int main() {
auto ptr = std::make_shared<int>(0);
bool is_lockless = std::atomic_is_lock_free(&ptr);
printf("shared_ptr is lockless: %d\n", is_lockless);
}
使用以下编译器选项编译它会产生一个无锁的shared_ptr 实现:
g++ -std=c++11 -march=native main.cpp
虽然不是这样:
g++ -std=c++11 -march=native -pthread main.cpp
GCC 版本:5.3.0(在 Linux 上,使用 libstdc++),在多台机器上进行了测试,这些机器应该有必要的原子指令来完成这项工作。
有没有办法强制实现无锁(无论性能如何,我都需要无锁版本)?
【问题讨论】:
标签: c++ c++11 shared-ptr atomic lock-free