Обязателен ли префикс LOCK для изменения переменных в байтах потокобезопасным способом?

Для простоты предположим, что у нас есть ровно 8 потоков и байтовый массив длиной 8 байтов. Каждому потоку назначается байт из этого массива, то есть поток может свободно изменять назначенный байт и ни один из других байтов из массива.

Предположим также, что массив выровнен по границе 8 байт.

На первый взгляд было бы безопасным для потоков разрешать потокам изменять свои (и только свои) байты ad libitum, поскольку здесь фактически нет общих данных. Но, как я понимаю, все современные процессоры Intel и AMD, работающие на 64-битной Windows, могут считывать и записывать только не менее 8 байт (64-битных) за один раз. Таким образом, я полагаю, что при модификации всего 1 байта из выровненного блока из 8 байтов процессор считывает все 8 байтов, модифицирует рассматриваемый байт и записывает обратно 1 модифицированный байт вместе с 7 неизмененными байтами. Это все, кроме поточно-ориентированного, поэтому я подозреваю, что при записи этих байтов будет необходим префикс LOCK.

Хотя я очень надеюсь, что ошибаюсь. Есть идеи?

0 ответов

Другие вопросы по тегам