Вопрос не имеет особого смысла без указания среды выполнения.
В случае Java , скажем, объект синхронизации (объект, используемый для синхронизации) аналогичен любому другому объекту. объект является целью синхронизации, поэтому volatile
(который применяется к переменным-членам) необходим только в том случае, если переменная , содержащая объект синхронизации , может измениться. Я бы избегал разработки программы, которая нуждается в таких конструкциях.
Помните (опять же, в Java), это оценка выражения - обычно это переменный доступ - который приводит к использованию объекта синхронизации. Эта оценка ничем не отличается от любой другой в этом аспекте.
В конце концов, однако, он просто использует инструменты синхронизации определенной среды выполнения / среды таким образом, чтобы они были четко определены и хорошо себя вели.
Счастливого кодирования.
Java, например, гарантирует, что synchronized(x) { foo }
, где x является конкретным объектом, создаст взаимоисключающую критическую область, в которой выполняется foo
. Для этого он должен выполнить внутреннюю работу, чтобы гарантировать, что данные бухгалтерского учета корректно сбрасываются на все процессоры / кэши. Тем не менее, эти детали, как правило, выходят за рамки времени выполнения с точки зрения использования конструкции синхронизации.