P1 и P2 - это процессы или узлы в кластере. f1 и f2 - их флаги. Предположим, что модель сильной памяти и что оба процесса могут быть перезапущены в любой момент, и что перезапуск процесса очищает его флаг, вот алгоритм, который я придумал и еще не смог сломать, но это беспокоит меня, потому что это не теоретически доказано и выглядит слишком просто по сравнению с Петерсоном., пожалуйста, нарушите этот алгоритм синхронизации.
P1 start:
set f1
if f2 set then clear f1, wait some, goto start
else enter critical section
do whatever
clear f1
P2 start:
set f2
if f1 set then clear f2, wait some, goto start
else enter critical section
do whatever
clear f2
Может ли кто-нибудь увидеть поток? Кроме того, может быть, что один из процессов может голодать другому, быстро перейдя в раздел?
да, но не совсем: 1) «wait some» означает ожидание разных периодов, например, Ethernet. Просто не написал это явно 2) Я думаю, это не зависит от того, если-ясное не атомарное –
1) Не может решить проблему, в зависимости от того, как вы знаете, как долго ждать. Проверьте возможные столкновения. 2) Если он является атомарным, то по крайней мере один из них сможет войти в критический раздел (тот, который проверяет последний). Голод может произойти, но вы уже это знали, поэтому я не упомянул об этом. –
правда. Для тайм-аутов я буду подражать тому, что делает Ethernet –