Я уверен, что, если разделяемая память между потоками считывается и никогда не записывается ни одним из потоков, защита мьютекса не нужна?
Это из-за того, что везде, где поток выгружен, он всегда может сниматься при перепланировке, и содержимое памяти не изменилось бы.
Да, вы правы, несколько потоков, читающих одну и ту же переменную, не представляют гонки.
Оба С++ 11 и C11 определяют гонку данных для доступа к ячейке памяти более чем одним контекстом выполнения без упорядочения, где по крайней мере один из обращений является записью. Если у вас нет записей, у вас нет гонок.