我的静态断言有问题。静态断言完全是这样的:
static_assert(std::atomic<bool>::is_always_lock_free);
Run Code Online (Sandbox Code Playgroud)
并且代码在 Raspberry Pi 3 上失败(Linux raspberrypi 4.19.118-v7+ #1311 SMP Mon Apr 27 14:21:24 BST 2020 armv7l GNU/Linux)。
在cppreference.comatomic::is_always_lock_free 参考站点上指出:
如果此原子类型始终是无锁的,则等于 true;如果它从不或有时是无锁的,则等于 false。该常量的值与定义的宏 ATOMIC_xxx_LOCK_FREE、成员函数 is_lock_free 和非成员函数 std::atomic_is_lock_free 一致。
对我来说第一个奇怪的事情是“有时无锁”。它取决于什么?但问题过后,回到问题。
我做了一个小测试。写了这段代码:
#include <iostream>
#include <atomic>
int main()
{
std::atomic<bool> dummy {};
std::cout << std::boolalpha
<< "ATOMIC_BOOL_LOCK_FREE --> " << ATOMIC_BOOL_LOCK_FREE << std::endl
<< "dummy.is_lock_free() --> " << dummy.is_lock_free() << std::endl
<< "std::atomic_is_lock_free(&dummy) --> " << std::atomic_is_lock_free(&dummy) << std::endl
<< "std::atomic<bool>::is_always_lock_free --> " << std::atomic<bool>::is_always_lock_free << std::endl;
return 0; …Run Code Online (Sandbox Code Playgroud)