Любопытно узнать, видел ли кто-нибудь еще эту проблему.У меня есть приложение, которое блокирует статически объявленный объект, следующим образом:
lock(Group.IsisGroups)
{
do some stuff
}
do-some-stuff выполняет различные операции, и одна из вызванных мной подпрограмм пытается заблокировать эту же блокировку.Блокировки потоков.
Я предполагаю, что эта проблема как-то связана с моим использованием отражения: на полпути вниз по стеку вызовов я выполняю вызов метода, просматривая его в определении класса и вызывая .Invoke().В результате получается стек вызовов:
[In a sleep, wait, or join]
[External Code]
ConsoleApplication2.exe!Isis.Group.doLookup(Isis.Address gaddr) Line 3774 + 0x13 bytes
ConsoleApplication2.exe!Isis.ReliableSender.GotIncoming(byte type, Isis.Address gaddr, Isis.Address sender, int minStable, Isis.Msg m) Line 10179 + 0x9 bytes
ConsoleApplication2.exe!Isis.ReliableSender.doReceive.AnonymousMethod14(byte type, byte code, int seqn, int truePayLoadLen, int PreFragLen, Isis.Address sender, Isis.Address dest, Isis.Address gaddr, int minStable, int FID, int Fn, int nF, byte[] buf) Line 3120 + 0x80 bytes
[External Code]
ConsoleApplication2.exe!Isis.Msg.doInvokeSingle(System.Delegate del, byte[] barray, System.Type[] types) Line 11582 + 0x10 bytes
ConsoleApplication2.exe!Isis.Msg.InvokeFromBArray(byte[] barray, System.Delegate del) Line 11527 + 0xf bytes
ConsoleApplication2.exe!Isis.ReliableSender.doReceive(object os, Isis.Group g) Line 10034 + 0x71 bytes
ConsoleApplication2.exe!Isis.ReliableSender.Receive(Isis.Group g) Line 10013 + 0xe bytes
ConsoleApplication2.exe!Isis.ReliableSender.StartGroupReader.AnonymousMethod__6(object o) Line 9097 + 0xc bytes
[External Code]
Итак, начальный вызов lock(Group.IsisGroups)
находится в верхнем методе стека ReliableSender.StartGroupReader
, и код блокируется при вызове блокировки в нижнем методе doLookup.,Блоки [External Code]
находятся там, где я вызвал метод отражения Invoke()
, и из вызова в lock()
, что привело к тупиковой ситуации.Определенно, тот же объект заблокирован и т. Д. (Объект статически размещается, когда мой класс загружен и имеет тип List<Isis.Group>
, и хотя я действительно добавляю и удаляю объекты, фактический объект List остается в порядке.
Все предложенияна что это может быть причиной?