2016-05-30 1 views
1

2 потока A и B разделяют volatile int i. приращенияgcc: __sync_lock_test_and_set VS. = оператор с изменчивыми переменными

резьбы A i как это: __sync_fetch_and_add(&i, 1);

резьбы В устанавливает i на произвольное значение V, как это: i = 15;.

Мой вопрос: для такого использования следует использовать __sync_lock_test_and_set(&i, 15); вместо прямого воздействия с помощью оператора =?

Если да, то __sync_lock_release обязательно после test_and_set?

ENV: GCC 4.1.2, CentOS 5.11 32 бита, не C++ 11

ответ

0

Если вы не используете синхронизации функций, то есть гонки данных для i между резьбой A и B. И как в определение __sync_lock_test_and_set и __sync_lock_release, вы должны использовать выпуск после использования sync_lock.

for ref

Смежные вопросы