likenoother
@likenoother

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

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

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

Но вот с atomic проблема, а без нее никак.
Подскажите библиотеку для атомарного изменения переменной в С++?
  • Вопрос задан
  • 2516 просмотров
Решения вопроса 1
Tujh
@Tujh
Без требований кросплатформенности можно использовать WInAPI и её Interlocked* функции.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@mt_
Конкретно на ваш вопрос не отвечу. Но сам пишу во фреймворке U++, где все эти вещи присутствуют в кроссплатформенном виде:
Atomic t;
AtomicWrite(t, 1);
Ответ написан
Комментировать
apangin
@apangin
В GCC есть встроенные функции вида _sync_val_compare_and_swap().
Под Solaris можно сделать #include <atomic.h>, где есть функции вида atomic_cas().
Под Windows — API из разряда InterlockedCompareExchange().

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы