У меня есть переменная в общей памяти x в многопроцессорной системе.
void MyFunction(volatile int* x) {
if (*x != 0) {
// do something
}
}
Другие процессы (возможно, на других процессорах) будут записывать в x, используя встроенные атомарные операции gcc, такие как __sync_bool_compare_and_swap и т. д.
Я думаю, что сталкиваюсь с некоторыми проблемами параллелизма кеша, когда иногда требуется некоторое время, прежде чем x, наконец, обновится с новым значением.
Я хочу своего рода atomic_compare (без свопа), если такая вещь существует? Или «атомарное чтение». Какой самый быстрый способ сделать это? (избегая мьютексов, блокировок и т. д.)
Спасибо
Редактировать:
Я только что понял, что несколько хакерским обходным путем будет использование __sync_val_compare_and_swap со значением, которое, как я знал, никогда не может быть. Решит ли это проблему? (Есть ли более чистый способ?)