Есть ли разница между LockObject
и lockObject
? Непонятно ...
Тем не менее! Если это разные объекты, то сначала: вы не можете Wait
на блокировке, которой у вас нет ... и TryEnter
вернет false только если вы укажете время ожидания. Что именно этот код пытается сделать?
Без дополнительного контекста не совсем понятно, для чего предназначены PulseAll
и Wait
; например, здесь они используются для блокировки очереди, когда она переполнена (Wait
), или освобождают ее, когда становится доступным пространство (PulseAll
) и т. д. Трудно отладить код потоков без полного взаимодействия между потоками.
Похоже, вам может понадобиться:
lock (lockObject)
{
// do stuff
}
Есть две непосредственные проблемы, которые я вижу; Во-первых, не очевидно, что вы всегда снимаете блокировки, которые вы берете (т.е. исключения). Попробуйте просто использовать lock
для Enter/Exit
- все получится правильно.
Во-вторых, если все темы вызывают Wait
... кто их разбудит? Чего они ждут для ? Как представлено: да, они все будут спать бесконечно.