pavia писал(а):
Если раньше считал что Mr.McD. не понимаю потому что чего-то не знаю. Так теперь видно что он просто глупец.
Ассемблер нагляднее машинного кода. А в виду того что это примитивный язык, то будет видны все недостатки блокировки.
Первоклассный понос мыслей. Упячка одобряе...
Yoda писал(а):
Вы же причисляете себя к ось-девелоперам, то есть разрабатываете ядро системы. Вот и расскажите мне, безграмотному, как в ядре осуществляется запрет на повторную входимость в него. А точнее, запрет на выполнение функции одним процессором, пока её выполняет другой. :)
Делается это так: за критическим участком кода закрепляется свой флаг занятости (переменная). Каждый поток, перед тем, как войти в критическую секцию крутится в бесконечном цикле, ожидая освобождения флага. Если флаг свободен - атомарно его устанавливает в состояние "занято" (для х86 - xchg), и заходит в КС. По выходу из КС - сбрасывает флаг. Данный подход называется -
спинлок.
Код:
//Устанавливаем параметры фага.
mov eax, адрес_флага
mov ebx, занято
//Крутимся в цикле.
wait_cycle:
lock xchg [eax], ebx
cmp ebx, свободно
jnz wait_cycle
...Работаем в КС
//Сбрасываем флаг.
mov eax, адрес_флага
mov ebx, свободно
lock xchg [eax], ebx
Если передача сообщения выполняется быстрее, чем переключение контекста, то следует применять спинлок, а не мутекс (что обычно и делают). Но ни спинлок, ни мутекс не имеют прямого отношения к обмену сообщениями, ибо последний - самостоятельный высокоуровневый механизм обмена данными и синхронизации, со своими плюшками. Только не говори, что ты не знал..)
Станислав, очень своеобразная у тебя система...