Когда поток заблокирован. Может ли быть причиной блокировки другого потока в том же процессе или во всем процессе? - PullRequest
0 голосов
/ 09 февраля 2011

Когда поток блокируется, необходимо ли этому потоку блокировать любые другие потоки в том же процессе или его процессе? Это происходит каждый раз?

Ответы [ 3 ]

1 голос
/ 09 февраля 2011

Да, это может произойти для любой операции синхронизации, когда одному потоку нужно ждать, пока другой поток что-то сделает. Например, если поток A удерживает блокировку, а затем выполняет долгую блокирующую операцию в ядре, другой поток B заблокирует, если попытается получить блокировку. Поток B будет заблокирован по крайней мере до завершения операции блокировки потока A.

В крайних случаях ожидающие друг друга потоки приведут к Deadlock

Дополнительные уточнения :

Потоки в процессе выполняются независимо друг от друга. Блокировка одного потока не обязательно должна блокировать другие потоки. Это одна из главных причин, по которой потоки используются в первую очередь.

1 голос
/ 09 февраля 2011

Конечно.Нам не пришлось бы справляться с тупиком, если бы это было не так.Сценарий состоит в том, что заблокированный поток получил объект синхронизации, который пытается получить другой поток.Это заблокирует.

Хорошо, я получил вопрос сейчас.Вообще-то да.Некоторый другой код должен быть запущен, чтобы снять условие блокировки.Неочевидные случаи - это потоки ядра, которые запускают код в драйверах, если поток заблокирован во время ввода-вывода.Или планировщик потока, в случае, если поток заблокирован, потому что он ожидает получения процессора или ожидает с бесконечным тайм-аутом.

0 голосов
/ 17 мая 2013

когда поток заблокирован, он блокирует также все потоки в процессе

...