在 lambda 表达式中使用 std::atomic
Use std::atomic in lambda expression
我想在lambda表达式中捕获std::atomic
。原子变量的生存期必须与 lambda 绑定,因此我无法通过引用捕获,但我想避免堆分配。
如何修改以下代码片段以使其按预期编译和运行?
#include <atomic>
int main()
{
std::atomic_int a{42};
auto check = [a] () mutable { return a.fetch_sub(1) == 1; };
// ^ error: call to deleted constructor of 'std::atomic_int'
}
您可以直接初始化捕获并依靠 C++17 保证复制/移动 elision:
#include <atomic>
int main()
{
auto check = [a = std::atomic_int(42)]() mutable {
return a.fetch_sub(1) == 1;
};
}
相关文章:
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 在 lambda 表达式中使用 std::atomic
- C++std::atomic在程序员级别保证了什么
- 如果在 2 个线程中使用,是否值得将size_t声明为 std::atomic?
- 在 C++20 之前和之后初始化 std::atomic
- std::atomic 和 std::mutex 的相对性能
- 简单使用 std::atomic 在两个线程之间共享数据
- Port pthread_cond_broadcast to std::atomic
- std::atomic中的任何内容都是免费等待的
- 为什么 std::atomic 构造函数在 C++14 和 C++17 中的行为不同
- std::atomic是如何实现的
- 使用 std::atomic 标志和 std::condition_variable 在工作线程上等待
- 为什么std::atomic的默认构造函数不默认初始化底层存储值
- 读取互斥对象范围之外的volatile变量,而不是std::atomic
- 为什么std::atomic中的所有成员函数都同时出现在有volatile和没有volatile的情况下
- 访问共享内存而不使用易失性、std::atomic、信号量、互斥锁和自旋锁
- 两个不同的进程,在同一地址上有 2 个 std::atomic 变量?
- 原子读取,然后使用 std::atomic 写入
- std::atomic::fetch_add是x86-64上的串行化操作
- 实际上,C++11 中 std::atomic 的内存占用量是多少?