LINUX.ORG.RU

shared variables


0

1

Собственно, вопрос простой. Есть разделяемая переменная (допустим, глобальная) и 2 потока.
Один из них только вычитывает значение этой переменной, а другой - изменяет.
Нужна ли синхронизация?
И будет ли это зависеть от типа переменной (char, int, long и т.д.)?

★★

смотря для каких целей второй поток вычитывает значение.

а вообще да , нужна.

ukr_unix_user ★★★★
()

Минимум volatile нужен. Возможен фокус с длиной, позицией, ключами оптимизации. Например, формально long long на x86-64 может быть подменен одной операцией. Однако, при включении опции -g вместо одной операции может быть две по 32 бита, например, если будет попытка записи константы.

io ★★
()
Ответ на: комментарий от io

смотря для каких целей второй поток вычитывает значение.


Идея такая - первый поток выполняет какие-то действия в цикле и, соответственно, на каждом проходе цикла изменяет значение переменной. Второй поток тупо вычитывает это значение и сравнивает с предыдущим считанным (чтобы определить, не повис ли первый поток).
Соответственно, переменная вполне может быть и char, никто не мешает счетчику работать по-кругу.

Минимум volatile нужен. ... Однако, при включении опции -g вместо одной операции может быть две по 32 бита, например, если будет попытка записи константы.


Вот про такое поведение -g не знал. Спасибо!

solovey ★★
() автор топика

если все операции над ней атомарны, то хватит volatile. В противном случае нужна.

anonymous
()
Ответ на: комментарий от solovey

поздравляю, ты придумал software watchdog!

anonymous
()

На интеле в твоем случае для типа int не нужна. Достаточно только проставить volaile. Но если модифицировать переменную будут двое или больше то нужна точно. Либо смотри здесь http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html . Но по факту на интеле всеравно при атомарной операции все ядра будет залочивать так как использует префикс lock.

mmarkk
()
Ответ на: комментарий от mmarkk

Всем спасибо за ответы

поздравляю, ты придумал software watchdog!

Да, я в курсе...

На интеле в твоем случае для типа int не нужна

Забыл уточнить в самом начале - все это будет жить под arm

solovey ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.