Предположим, у меня есть система с N процессами. Каждый процесс требует максимальных ресурсов K (K < < N). Для предотвращения конфликтов процесс должен блокировать каждый ресурс перед его доступом. Возможна ли взаимоблокировка, и если да, то каков максимальный N, для которого система по-прежнему безголовая?Тупик для системы с N потоками
ответ
Максимальное значение N равно 1. При использовании двух или более потоков, взаимодействующих в одном и том же процессе с одной и той же памятью, взаимоблокировка вполне возможна. Сценарий:
A asks for and receives lock 1
B asks for and receives lock 2
A asks for lock 2 and pauses
B asks for lock 1 and pauses
A and B now deadlock
Порядок блокировки должны быть согласованы в течение> 1 замков для того, чтобы полностью предотвратить тупики.
«Для предотвращения столкновений процесс должен блокировать каждый ресурс перед его доступом» - это вводит в заблуждение/неверно. Он должен заблокировать КАЖДЫЙ ресурс, который ему нужен, в одной операции блокировки или оставаться заблокированным до тех пор, пока весь комплект не станет доступен. Вполне возможно, что потоки будут представлять требование к ресурсам, установленное для структуры/экземпляра управления ресурсами, и оставаться заблокированными до тех пор, пока ВСЕ ресурсы в наборе не станут доступны, не предотвращая доступ к любому из них во время ожидания.
Применение блокировки для каждого ресурса и создание потоков для последовательной блокировки ресурсов - это наивное решение, которое, скорее всего, не сработает для любого N> 1, как объясняет Хейни.
- 1. mutilthreading с N потоками
- 2. Тупик операционной системы
- 3. Тупик с потоками, вызывающими семафор ядра через sysfs
- 4. Попытка создать тупик между двумя потоками
- 5. Список процессов элементов «N» с несколькими потоками
- 6. Тупик в MySQL из-за вставки несколькими потоками
- 7. Тупик (псевдокод)
- 8. Когда тупик не тупик?
- 9. Секция кода с N потоками, выполняющимися в заказе FIFO
- 10. C++ пул потоков с изменяемыми потоками: странный тупик при назначении задач треаадам
- 11. Многопоточность и тупик
- 12. Тупик с идентичными запросами
- 13. Проблемы с потоками в Java
- 14. WaitForSingleObject Тупик
- 15. проблема с потоками (EXC_BAD_ACCESS)
- 16. webdriver 2.20 с потоками
- 17. Проблема с потоками Java?
- 18. можно создать тупик с одним замком
- 19. Тупик с использованием HttpWebRequest
- 20. MPI Тупик с коллективными функциями
- 21. проблема с потоками
- 22. existingObjectWithID тупик с NSPrivateQueueConcurrencyType
- 23. Тупик с dispatch_sync
- 24. Тупик с использованием именованного семафора
- 25. Программирование сокетов Python с потоками
- 26. «Тупик» с MPI_Waitall
- 27. С ++ Сетевой класс с потоками
- 28. Тупик с использованием переменных состояния Boost; указатели не обновляются между потоками?
- 29. Управление потоками http с потоками python
- 30. Работа с потоками с DCOM