.Net benutzt hier die Monitor Klasse, was einem Critical Section ähnlich ist, aber angeblich nichts mit dem Windows Kernel zu tun hat. Klassen wie HashTable können einen Threadsafe Wrapper anlegen,
Dim htab As New Hashtable
Dim shtab As Hashtable = Hashtable.Synchronized(htab) ' Obtain threadsafe wrapper
shtab.Add("akey", "aval")
Dim myval As String = shtab("akey")
Das ist aber nicht immer ausreichend, und deswegen benutzt man oft das SyncRoot objekt direkt mit dem Monitor
SyncLock htab.SyncRoot
htab.Add("bkey", "bval")
End SyncLock
---
SyncLock htab.SyncRoot
If htab.Contains("bkey") Then
Dim myval As String = htab("bkey")
End If
End SyncLock
Bei If und Zuweisung würde ein Lock pro Methode offensichtlich nicht genug schützen. Es bleibt für mich unklar wo ein Bug liegt oder was im Kernel umgeschrieben werden sollte.
geschrieben von
okuna
,
06.04.2006, 22:23 Uhr
, 23 mal gelesen