У меня есть следующий код C ++ псевдокод
class A
{
private:
B s_staticvar;
public:
static void doSomething()
{
}
}
Ряд потоков может вызывать doSomething (). Все темы только для чтения s_staticvar & не изменять их.
Мой вопрос: нужно ли блокировать статическую переменную перед ее чтением?
Могут ли неатомарные чтения объекта B вызвать проблемы с синхронизацией?
Вы можете безопасно читать данные из нескольких потоков. Блокировка не требуется. Эти темы даже не заметят друг друга. Только вам нужно убедиться, что вы полностью подготовили свою переменную, прежде чем другие потоки начнут работать.
В многоядерной / многопроцессорной среде может случиться так, что несколько копий ваших данных будут присутствовать в кешах разных процессоров. Это не проблема, если они все одинаковы.
Других решений пока нет …