Сведения о вопросе

Drake

12:46, 28th August, 2020

атомарность в С++

Просмотров: 360   Ответов: 3

Доброго времени суток!

Возникла задача: необходимо синхронизировать через testAndSet потоки:
int atomic testAndSet ( char *lock ) {
char var;
var = *lock;
*lock = 1;
return var;
}

Но вот с atomic проблема, а без нее никак.
Подскажите библиотеку для атомарного изменения переменной в С++?



  Сведения об ответе

appple

16:31, 6th August, 2020

Без требований кросплатформенности можно использовать WInAPI и её Interlocked* функции.


  Сведения об ответе

KOMP

23:17, 11th August, 2020

Конкретно на ваш вопрос не отвечу. Но сам пишу во фреймворке U++, где все эти вещи присутствуют в кроссплатформенном виде:
Atomic t;
AtomicWrite(t, 1);


  Сведения об ответе

9090

18:24, 12th August, 2020

В GCC есть встроенные функции вида _sync_val_compare_and_swap().
Под Solaris можно сделать #include <atomic.h>, где есть функции вида atomic_cas().
Под Windows — API из разряда InterlockedCompareExchange().

Универсального решения не знаю. Несколько раз встречал для этого дела inline assembler под #ifdef'ами для разных платформ.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться