【发布时间】:2018-07-27 02:27:03
【问题描述】:
我想定义一个互斥体并在其上执行一个 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 表达式并在调用它之前/之后锁定/解锁。有没有办法做到这一点?
【问题讨论】:
-
你为什么要这个?这段代码的一般用例是什么?
-
简短回答是“否”。
std::atomic不支持任何抓取互斥体,调用调用者指定的函数,然后释放互斥体的操作。如果您真的想做这样的事情,请实现您自己的类以提供所需的逻辑。我怀疑是否有必要 - 您唯一的动机似乎是避免将代码包装在互斥体中。 -
我不明白。
myAtomic.call是什么?原子有store和load,但没有call。变量myAtomic是指向MyPointer的指针。MyPointer有什么属性?互斥量在哪里?更加仔细。
标签: c++ multithreading concurrency stl atomic