Несколько потоков читают статическую переменную одновременно - PullRequest
5 голосов
/ 07 декабря 2011

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

UPDATE: мой вопрос больше относится к области физики или чего-то подобного (= если это тот же момент времени, когда потоки читают переменную.

Ответы [ 3 ]

9 голосов
/ 07 декабря 2011

Если значение переменной не изменяется (ни один поток не записывает значение), поэтому чтение несколькими потоками будет безопасной операцией и не требует дополнительной синхронизации, такой как блокировка.В противном случае вы должны рассмотреть возможность блокировки для операций доступа для записи.

ОБНОВЛЕНИЕ: Относительно обновления вопроса

Физически в рамках одноядерного ЦП только одна инструкция (упрощенная, игнорировать ЦПконвейеры), поэтому нет возможности получить доступ к одной и той же ячейке памяти за одно и то же время.

2 голосов
/ 07 декабря 2011

Они не могут обращаться к нему по-настоящему одновременно - в какой-то момент ЦП будет чередовать чтения.

1 голос
/ 07 декабря 2011

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

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