Доступ к статической постоянной переменной из нескольких потоков в C - PullRequest
4 голосов
/ 17 мая 2010

У меня есть некоторый опыт работы с многопоточным программированием под Linux (потоки C / C ++ и POSIX), однако наиболее очевидные случаи иногда бывают очень сложными.

В моем коде несколько статических константных переменных (глобальных и локальных функций). Могу ли я получить к ним доступ одновременно из нескольких потоков без использования мьютексов? Потому что я не изменяю их, все должно быть хорошо, но всегда лучше спросить.

Мне приходится выполнять оптимизацию с высокой скоростью, поэтому даже такие быстрые операции, как блокировка / разблокировка мьютекса, для меня довольно дороги, особенно потому, что мое приложение будет обращаться к этим переменным в виде длинных циклов.

Ответы [ 3 ]

14 голосов
/ 17 мая 2010

Если вы инициализируете их только в одном потоке, а затем никогда не изменяете их, будет нормально читать их одновременно из нескольких потоков без мьютексов и т.д.

4 голосов
/ 17 мая 2010

Если вы только читаете, а не изменяете, вам не нужны блокировки

0 голосов
/ 17 мая 2010

Я не знаю о других архитектурах, но Intel гарантирует, что все чтения являются атомарными, однако, если вам действительно хочется добавить некоторые из них, используйте что-то вроде value = atomic_add(&variable,0);, это заставит все записи, затем добавит 0 к значению затем вернуть старое значение, которое не изменилось

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...