Псто, насколько spin lock хуже mutex/semaphor'а? Как оно вообще, до сих пор ли spin lock блочит разом все ядра системы и, главное, блочит ли мьютекс ядро целиком или как?
spin lock должен произвести атомарную операцию с переменной, а это значит что на время выполнения операции он должен аппаратно блокировать системную шину (с помощью префикса «lock»), т.е. остальные процы ничего делать в это время не могут, а остальные процы есть и их много.
Статья, на которую я сослался в первом комментарии, дала мне немного другое представление о спин-локах. В частности, пассивный спиннинг подразумевает передачу управления операционной системе, то есть ничего там не лочится.
До архитектуры P6 атомарные RMW инструкции действительно выставляли сигнал LOCK на шину, хотя и это и не приводило к тому, что все остальные процессоры не могли ничего делать (они не могли только обращаться к шине). Начиная с архитектуры P6, т.е. с 1995 года, процессоры используют т.н. cache-locking, который не имеет никакого глобального эффекта, т.е. N процессоров/ядер вполне могут выполнять N атомарных RMW инструкций параллельно без какой-либо корреляции.
А разве раньше spin lock блочил все ядра разом? Я про спинлоки недавно на 1024cores.net читал, там хорошая статья: http://www.1024cores.net/home/lock-free-...
spin lock должен произвести атомарную операцию с переменной, а это значит что на время выполнения операции он должен аппаратно блокировать системную шину (с помощью префикса «lock»), т.е. остальные процы ничего делать в это время не могут, а остальные процы есть и их много.
Статья, на которую я сослался в первом комментарии, дала мне немного другое представление о спин-локах. В частности, пассивный спиннинг подразумевает передачу управления операционной системе, то есть ничего там не лочится.
пассивный спиннинг отличается только тем, что ты уступаешь квант времени между неудачными попытками захвата lock'а, которые атомарны и блокирующи.
До архитектуры P6 атомарные RMW инструкции действительно выставляли сигнал LOCK на шину, хотя и это и не приводило к тому, что все остальные процессоры не могли ничего делать (они не могли только обращаться к шине). Начиная с архитектуры P6, т.е. с 1995 года, процессоры используют т.н. cache-locking, который не имеет никакого глобального эффекта, т.е. N процессоров/ядер вполне могут выполнять N атомарных RMW инструкций параллельно без какой-либо корреляции.
спасибо большое, теперь ясно