Добрый день. Скажите пожалуйста, как будет выглядеть в плане качества реализации следующая схема: 1. есть адрес памяти mem 2. первая нить процесса пишет в указанную ячейку (mem = mem + x) 3. вторая нить процесса читает из указанной ячейки mem Не будет ли между ними какого либо аппаратного конфликта, если обе нити работают в многоядерной(и/или многопроцессорной) архитектуре с общей памятью ? Спасибо.
Все равно же операции атомарные. Сначала один запишет, а потом другой прочитает, или наоборот. Они не будут выполнены совсем одновременно, as far as i remember. Другое дело, что полюбому это ничем хорошим не закончится, поскольку между потоками нужна синхронизация чтобы все было нормально. Но я так понимаю, вопрос заключался не в этом, а это просто лирическое отступление. ЗЫ. А что тема делает в алгоритмах? // ну допустим что алгоритм )
Поведение зависит от выравнивания. При выровненных данных операции записи атомарны. Остальные тонкости в манах в разделах о синхронизации на MP.
Great ЗЫ. А что тема делает в алгоритмах? Вобще то это по моему мнению относится к алгоритму. Т.к. мной описан алгоритм взаимодействия двух потоков, его можно изменить, оспорить и т.п.
В плане быстродействия очень даже может быть, особенно если два потока обращаются к одной и той же линейке кэша, поскольку по крайней мере L1 у разных ядер разные