"Critical Section" in VB.net?
-
Hallo!
Ich habe 2 Threads, die beide auf denselben Codeabschnitt zugreifen. Unter C++ gibts dafür ja die critical section, um den gleichzeitigen Zugriff zu verhindern. Wie sieht das unter Vb.net aus, wenn mein CodeabschnittDownloadStatusList.RemoveAt(ID) DownloadStatusList.Insert(ID, params)
ist?
SyncLock Me DownloadStatusList.RemoveAt(ID) DownloadStatusList.Insert(ID, params) End SyncLock
hab ich schon probiert. Funktioniert leider nicht.
Christoph
-
Und wie sehen die andere Zugriffe auf DownloadStatusList aus?
Simon
-
Das sind die einzigen Zugriffe auf DownloadStatusList durch die Threads.
-
Me (bzw. this) lockt man nicht. Du handelst Dir damit schneller Deadlocks ein als Du glaubst.
Geht nicht ist keine ausreichende Fehlerbeschreibung. Das Problem ist nicht ausreichend beschrieben. Eine ausführliche Beschreibung mit Beispiel findest Du in der Hilfe unter SyncLock-Anweisung.
-
-
Du musst alle Zugriffe auf "DownloadStatusList" synchronisieren, denn alle Zugriffe sind "in Threads". Auch der Haupt-Thread eines Programms ist ein Thread. Auch dort musst du synchronisieren.
-
Wenn DownloadStatusList ein Control ist, oder in RemoveAt bzw. Insert Controls angesprochen werden, dann darfst du die Funktionen sowieso nicht aus einem anderen Thread als dem GUI-Thread ausführen.
-
Wenn die RemoveAt bzw. Insert Funktionen andere Funktionen von anderen Klassen aufrufen, musst du evtl. noch viel mehr synchronisieren als du denkst.
-