Ваш алгоритм должен быть в порядке для тупиков, голодания и конфликтов.
Однако этот вид решения не масштабируется и будет работать только для 2 процессов, которые, вероятно, не то, что вы ищете.
Вы можете иметьПосмотрите на запись wikipedia'e для взаимоблокировки , чтобы найти полезный алгоритм.
РЕДАКТИРОВАТЬ: я не могу голодать, так как вы устанавливаете флаг для каждого процесса, который говорит, когда процесс хочет войти в критическую секцию.Таким образом, если процесс P владеет критической секцией, но процесс Q хочет войти, он сделает это, когда P завершит критическую секцию, потому что даже если cheduler решит повторно выполнить P, сама P проверит, q == 0, и если так, то будет ждать.
Конечно, твой пример - учебный пример.Он не будет работать в реальном приложении, так как использует опрос и, возможно, бесконечные циклы.Я настоятельно рекомендую не пытаться использовать его.