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 ()

можно использовать sig_atomic_t без блокировки.

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

Это ложь. Но для задачи ТС это можно использовать.

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

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

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

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

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

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

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