LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Sequentially-consistent ordering для мьютексов

А по-русски?

Для данного потока порядок четкий - сначала 1 затем 2, для остальных же потоков вполне может быть сначала 2 затем 1.

Порядок одних и тех же событий во всех потоках всегда одинаковый. Проблема только в том, что он может отличаться от написанного в исходном коде.

Идею выражу в коде:

У тебя ж там race, практически гарантированный.

main_thread: write_a();

тут все мютексы свободны

check_thread: lck(a_mtx);
check_thread: if (a_data) - true
check_thread: lck_1(b_mtx);
check_thread: assert(b_data); - false

Чтобы избежать надо оба write под общий мютекс.

Исходная версия firkax, :

Sequentially-consistent ordering для мьютексов

А по-русски?

Для данного потока порядок четкий - сначала 1 затем 2, для остальных же потоков вполне может быть сначала 2 затем 1.

Порядок одних и тех же событий во всех потоках всегда одинаковый. Проблема только в том, что он может отличаться от написанного в исходном коде.

Идею выражу в коде:

У тебя ж там race.

main_thread: write_a();

тут все мютексы свободны

check_thread: lck(a_mtx);
check_thread: if (a_data) - true
check_thread: lck_1(b_mtx);
check_thread: assert(b_data); - false

Чтобы избежать надо оба write под общий мютекс.