Обязателен ли префикс LOCK для изменения переменных в байтах потокобезопасным способом? - PullRequest
0 голосов
/ 06 сентября 2018

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

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

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

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

...