Нет, постепенное увеличение не ориентировано на многопотоковое исполнение. Ни один не INC
и DEC
инструкции. Они все требуют загрузки и хранилища, и поток, работающий на другом ЦП, мог сделать свою собственную загрузку или хранилище на той же ячейке памяти, чередованной между теми операциями.
Некоторые языки имеют встроенную поддержку синхронизации потока, но это обычно - что-то, что необходимо попросить, не что-то, что Вы получаете автоматически на каждой переменной. У тех, которые не имеют встроенной поддержки обычно, есть доступ к библиотеке, которая обеспечивает схожую функциональность.
Одним словом, нет.
можно использовать что-то как InterlockedIncrement()
в зависимости от платформы. На.NET можно использовать эти Interlocked
методы класса (Interlocked.Increment()
, например).
А Rob Kennedy упомянул , даже если операция реализована с точки зрения сингла INC
инструкция, что касается памяти, что набор чтения/инкремента/записи шагов выполняется. Существует возможность на многопроцессорной системе для повреждения.
существует также эти volatile
проблема, которая была бы необходимой частью создания ориентированной на многопотоковое исполнение операции - однако, отмечание переменной volatile
не достаточно для создания этого ориентированным на многопотоковое исполнение. Используйте взаимно блокируемую поддержку, которую оказывает платформа.
Это верно в целом, и на x86/x64 платформах, конечно.