Инкременторы / декременторы (var ++, var-) и т.д. ориентированы на многопотоковое исполнение?

15
задан Community 23 May 2017 в 12:01
поделиться

2 ответа

Нет, постепенное увеличение не ориентировано на многопотоковое исполнение. Ни один не INC и DEC инструкции. Они все требуют загрузки и хранилища, и поток, работающий на другом ЦП, мог сделать свою собственную загрузку или хранилище на той же ячейке памяти, чередованной между теми операциями.

Некоторые языки имеют встроенную поддержку синхронизации потока, но это обычно - что-то, что необходимо попросить, не что-то, что Вы получаете автоматически на каждой переменной. У тех, которые не имеют встроенной поддержки обычно, есть доступ к библиотеке, которая обеспечивает схожую функциональность.

32
ответ дан 1 December 2019 в 00:37
поделиться

Одним словом, нет.

можно использовать что-то как InterlockedIncrement() в зависимости от платформы. На.NET можно использовать эти Interlocked методы класса (Interlocked.Increment(), например).

А Rob Kennedy упомянул , даже если операция реализована с точки зрения сингла INC инструкция, что касается памяти, что набор чтения/инкремента/записи шагов выполняется. Существует возможность на многопроцессорной системе для повреждения.

существует также эти volatile проблема, которая была бы необходимой частью создания ориентированной на многопотоковое исполнение операции - однако, отмечание переменной volatile не достаточно для создания этого ориентированным на многопотоковое исполнение. Используйте взаимно блокируемую поддержку, которую оказывает платформа.

Это верно в целом, и на x86/x64 платформах, конечно.

13
ответ дан 1 December 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: