LINUX.ORG.RU

Атомарный инкремент

 


0

1

У меня есть несколько потоков, которые получают доступ к переменной m, при этом она увеличивается на единицу каждый раз при доступе. Я хочу быть уверен, что если первым доступ к счетчику имеет 1-ый поток, то он получает значение счетчика m, а второй поток, который обратился позже , получает значение m+1. Но вот незадача - операция инкремента не атомарна. Как быть?

unsigned get_m()
{
     return m++;
}


fetch-and-add

anonymous
()

Как быть?

пользоватся поиском перед тем как постить на лор

anonymous
()

Как раз таки операция инкремента атомарна. А вот операция get-and-increment не атомарна для int.

anonymous
()
Ответ на: комментарий от anonymous

4.2

нужен префикс lock, который компилятор не обязан вставлять

anonymous
()
Ответ на: комментарий от unt1tled

critical section.

капчуха: secreting ncdatis

anonymous
()
Ответ на: комментарий от Krieger_Od

целый мютекс для одного инкремента создавать слишком нерационально

Harald ★★★★★
()

в C11 (и С99 возможно тоже) есть atomic.h, там что-то нужное на эту тему лежит

Harald ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.