gpt4 book ai didi

c++ - 有原子 lambda 表达式吗?

转载 作者:行者123 更新时间:2023-11-30 02:21:12 24 4
gpt4 key购买 nike

我想定义一个互斥锁并在其上执行一个 lambda 表达式。有没有办法在 STL 中简洁地做到这一点?

我在找什么:

  std::atomic<MyPointer*> myAtomic;
myAtomic.call([&](int var1, int var2) { /* some code */ }, val1, val2);

我不寻找的是:

  std::mutex myMutex;
MyPointer* myPointer = new MyPointer();
myMutex.lock();
// some code
myMutex.unlock();

基本上,我希望 atomic 接受一个 lambda 表达式并在调用它之前/之后锁定/解锁。有办法做到这一点吗?

最佳答案

Atomic 以原子方式处理其接口(interface)中定义的操作。

因此您可以拥有一个原子指针并确保其值以原子方式递增或替换。您甚至可以拥有自己类型的原子对象,然后确保以原子方式复制它。 Atomic 可以使用原子 cpu 操作或任何类型的幕后锁定来符合规范(依赖于实现)。

但是原子性不会扩展到指向的对象,也不会扩展到在原子对象上调用的任何其他状态更改操作。

所以答案是否定的,你必须使用互斥锁,最好通过 lock_guard (这样即使在异常情况下也能确保锁定释放)。

关于c++ - 有原子 lambda 表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48822356/

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