Подход, основанный на использовании специальной машинной инструкции для осуществления взаимных исключений, имеет ряд преимуществ.
1. Он применим к любому количеству процессов, разделяющих основную память.
2. Этот подход очень прост, а потому легко проверяем.
3. Он может использоваться для поддержки множества критических разделов, каждый из которых может быть определен при помощи своей собственной переменной.
Однако у такого подхода имеются и свои серьезные недостатки.
1. Используется пережидание занятости. Следовательно, если процесс находиться в ожидании доступа к критическому разделу, он продолжает потреблять процессорное время.
2. Возможно голодание. Если процесс покидает критический раздел, а вход в него ожидают несколько других процессов, то выбор ожидающего процесса произволен. Следовательно, может оказаться, что один из процессов будет ожидать входа в критический раздел бесконечно.
3. Возможна взаимоблокировка. Рассмотрим следующий сценарий в однопроцессорной системе. Процесс Р1 выполняет специальную инструкцию (т.е. TestSet или Exchenge) и входит в критический раздел. После этого процесс прерывается процессом Р2 с более высоким приоритетом. Если Р2 попытается обратиться к тому же ресурсу, что и Р1, ему будет отказано в доступе в соответствии механизмом взаимоисключений, и он войдет в цикл пережидания занятости. Однако в силу того что процесс Р1 имеет более низкий приоритет, он не получит возможности продолжить работу, так как в наличии имеется активный процесс с более высоким приоритетом.
Из-за наличия недостатков как в случае использования программных, так и аппаратных решений нам следует рассмотреть и другие механизмы обеспечения взаимоблокировок.