Пусть имеются два параллельных процесса. В одном выполняется код P(S1); P(S2) , в другом – код P(S2); P(S1) , где S1 и S2 – семафоры. Как будет вести себя программа?
Пусть имеются два параллельных процесса. В одном выполняется код P(S1); P(S2) , в другом – код P(S2); P(S1) , где S1 и S2 – семафоры. Как будет вести себя программа?
Ответ(ы) на вопрос:
Все зависит от того, что обеспечивают эти семафоры.
1. Семафоры обеспечивают синхронизацию потоков. Тогда будут выполнены P(S!) в первом потоке и P(S2) во втором, причем более быстрый процесс подождет, а затем работа пойдет одновременно с точки P(S2) в первом потоке и P(S1) во втором.
2. Семафоры захватывают ресурсы. В этом случае произойдет взаимная блокировка. Например, P(S2) в первом потоке будет ждать некоего ресурса, захваченного вторым потоком, а P(S1) во втором потоке - ресурса, захваченного первым потоком.
3. Семафоры запрещают одновременное выполнение некоторого общего участка кода. Также возможна взаимная блокировка по принципу, описанному выше.
Не нашли ответ?
Похожие вопросы