Узнайте, заблокирован ли другой поток .Net? - PullRequest
0 голосов
/ 25 декабря 2011

При запуске другого потока .Net можно ли проверить, заблокирован ли он в данный момент (например, происходит синхронный ввод / вывод)?Я не хочу использовать тайм-аут или что-то в этом роде, все, что мне нужно - это узнать (из исходного / отправляющего потока), продвигается ли он (целевой / отправленный поток) в своей работе или в настоящее время находится в режиме ожидания.

Это возможно?

Ответы [ 2 ]

3 голосов
/ 25 декабря 2011

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

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

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

2 голосов
/ 25 декабря 2011

Вы можете проверить Thread.ThreadState свойство вашего рабочего потока. Это не даст вам слишком много деталей, но лучше, чем ничего.

...