![](/img/trans.png)
[英]Why isn't std::atomic_is_lock_free a static constexpr?
[英]Why doesn't atomic_is_lock_free link correctly on mac?
我正在嘗試在 mac 上運行此示例:
#include <iostream>
#include <utility>
#include <atomic>
struct A { int a[100]; };
struct B { int x, y; };
int main()
{
std::atomic<A> a;
std::atomic<B> b;
std::cout << std::boolalpha
<< "std::atomic<A> is lock free? "
<< std::atomic_is_lock_free(&a) << '\n'
<< "std::atomic<B> is lock free? "
<< std::atomic_is_lock_free(&b) << '\n';
}
但我得到這個錯誤:
Undefined symbols for architecture x86_64:
"___atomic_is_lock_free", referenced from:
std::__1::__atomic_base<main::B, false>::is_lock_free() const volatile in lock_free_main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
這個例子也是一樣的。
我注意到如果我將Struct A
更改為只有一兩個int
,它確實會鏈接。 結果不正確時似乎不會鏈接,但為什么不鏈接? 對我來說似乎是一個錯誤。
我在這里和這里發現了一些較老的問題,這讓我認為這個錯誤現在應該已經解決了。
以下是我的編譯器版本:
$> g++ --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin19.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
請改用“is_always_lock_free”。
std::cout << std::boolalpha
<< "std::atomic<A> is lock free? "
<< a.is_always_lock_free << '\n'
<< "std::atomic<B> is lock free? "
<< b.is_always_lock_free << '\n';
您可能還需要定義“__cpp_lib_atomic_is_always_lock_free”,因為它還不是標准提案。
實際問題,“atomic_is_lock_free”在編譯時運行,至少對於 Mac 平台)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.