Что мне нужно делать сегодня с атомными операциями, довольно сложно, и мне нужна помощь. В двух словах, я хотел бы выполнить следующую операцию атомарной:Сравните некоторые атомные обмены
/* begin of atomicity */
if (--counter == 0)
{
Widget* widget = nullptr;
swap(some_widget, widget);
/* end of atomicity */
// use local 'widget' here
}
/* end of atomicity */
Я знаю C++ 11 Атомикс и встроенных функций. Предыдущий код только pseudo и предназначен для того, чтобы показать, что я хотел бы произойти атомарно. Я знаю, что одно решение заключается в том, чтобы счетчик имел состояние «Переход» (пример 0xFFFFFFFF) и менял его значение сначала на этот переход, а затем на новое значение: он по существу был бы аналогичен спин-блокировке. Любая идея о том, как это сделать эффективно (т. Е. Нет шпиндельных замков, нет мьютексов и, возможно, нет ожиданий)?
спасибо.
Там вы два **/\ * конец атомарностью \ */**, что один * правда * конец? Я сомневаюсь, что любой способ выполнить несколько операторов в атоме без использования блокировки. – davidshen84
Кроме того, вы не хотите * delete * 'some_widget', вы просто хотите присвоить его' nullptr'? – Barry