Делает наличие 2 различных потоков:
ориентировано на многопотоковое исполнение или нет?
(И я имею в виду здесь, не блокируя чтение, ни запись),
Этот конкретный случай безопасен, да.
Чтение и запись в разные части массива не мешает другим операциям.
Однако чтение и запись в одно и то же место может вызвать проблемы, в зависимости от типа элемента и размера элементов.
Короче говоря: да. До тех пор, пока он находится в двух разных местах, это безопасная операция.
Некоторое время назад было обсуждение этого, там есть полезная информация, если вам интересно.
Я не уверен, что это безопасно. Представьте, что у вас есть байт []. Эти байты плотно упакованы в памяти. Теперь, если вы измените эти байты, компилятор может объединить некоторые операции записи для выполнения операций чтения и записи размером слово (32 бита). На некоторых процессорах, например ARM, это единственный вид команд изменения памяти, которые есть у компилятора. Это особенно удобно, если вы изменяете более одного байта за раз. ЦП тоже может делать то же самое. Он также может изменять порядок вещей без вашего ведома. При такой оптимизации поток, читающий смежную память, может увидеть частичные изменения. Обычно вы не видите такого эффекта, потому что распределитель кучи вам удобен и всегда дает вам память, которая, по крайней мере, выровнена по словам.