Являются одновременным чтением переменной потокобезопасной?

Предполагая, что переменная не подвержена риску изменения во время чтения, существуют ли какие-либо неотъемлемые проблемы в переменной, считываемой двумя или более потоками одновременно?

Ответы

Ответ 1

Если ваше предположение выполнено, то проблем нет.

Ответ 2

Нет, эта операция не является поистине безопасной потоком.

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

Это может быть предотвращено за счет наличия барьеров памяти, правильного использования летучих или нескольких других механизмов. Нам нужно будет узнать больше о вашей среде, в частности языке, чтобы дать полное объяснение.

Небольшое повторение вашего вопроса, хотя и дает лучший ответ. Предполагая, что больше нет записей, и все предыдущие записи видны текущему потоку, тогда да, чтение значения из нескольких потоков безопасно.

Ответ 3

Пока это простая переменная, у нее нет риска.

Если это свойство, его чтение может иметь побочные эффекты, поэтому не гарантируется безопасность потоков.

Ответ 4

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

Ответ 5

Да в трех символах.

Изменить: Упс. Да, это потокобезопасно. Нет, проблем нет. Обычно люди спрашивают, существует ли что-то потокобезопасное, а не если оно небезопасно.