Каков вариант использования для операции atomic exchange (read-write)?
C++0x указывает std::atomic
шаблон для потокобезопасного атомарного доступа к переменным. Этот шаблон имеет, среди прочего, функцию-член std::atomic:: exchange это атомарно сохраняет новое значение в "this "и извлекает существующее значение"this".
Win32 имеет аналогичную функцию: InterlockedExchange
теперь, что эти операции делают просто: atomic read-modify.
то, что я не понимаю, что точка этой операции. Возвращаемое значение "бессмысленно", потому что как только я смогу проверить возвращаемое значение, другой поток, возможно, уже перезаписал его.
Итак, какой вариант использования для этого? что может сказать мне информация о том, какое значение было перед тем, как я написал свое новое значение в переменную?
Примечание:compare_exchange
/ InterlockedCompareExchange
семантика имеет смысл для меня, но не простая семантика обмена.
1 ответов
ваш типичный spinlock:
std::atomic<bool> lock; // initialize to false
{ // some critical section, trying to get the lock:
while (lock.exchange(true)) { } // now we have the lock
/* do stuff */
lock = false; // release lock
}
см. Herb Sutter's подождите-свободная очередь для реального приложения.