Is my impression correct that if shared memory between threads is only read and never written, by any of the threads, mutex protection is unneccessary?
It's because wherever a thread is preempted, it can always take off again when rescheduled, and the memory contents would not have changed.