История изменений
Исправление 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 под общий мютекс.