vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Geht das SO ???? 
Autor: ModeratorDaveS (Moderator)
Datum: 30.01.04 13:31

Mutex ist eine ziemlich teure Angelegenheit, das ist ein Kernelobjekt, und nur wirklich notwendig wenn man zwischen Prozessen synchronisieren will. Für die meisten Fälle reicht SyncLock aus (ist eigentlich System.Threading.Monitor), wie in diesem Beispiel:
 
    Private Class lockObject
        Public LockCount As Long
        Public id As Long
        Public Sub New(ByVal lm As CLockController)
            LockCount = 1
            lm._locknum += 1
            id = lm._locknum
        End Sub
    End Class
 
    Private _locks As New Hashtable()
    Private _locknum As Long
    Public Sub GetLock(ByVal type As String, ByVal name As String, ByVal stream _
      As String)
        Dim lockName As String = type + "//" + name + "//" + stream
        Dim lockItem As lockObject
 
        SyncLock (_locks.SyncRoot)
            lockItem = _locks(lockName)
            If lockItem Is Nothing Then
                lockItem = New lockObject(Me)
                _locks.Add(lockName, lockItem)
            Else
                lockItem.LockCount += 1
            End If
        End SyncLock
        Monitor.Enter(lockItem)
    End Sub
 
    Public Sub FreeLock(ByVal type As String, ByVal name As String, ByVal _
      stream As String)
        Dim lockName As String = type + "//" + name + "//" + stream
        Dim lockItem As lockObject
 
        SyncLock (_locks.SyncRoot)
            lockItem = _locks(lockName)
            If lockItem Is Nothing Then
                Exit Sub
            Else
                lockItem.LockCount -= 1
                If lockItem.LockCount = 0 Then
                    _locks.Remove(lockName)
                End If
            End If
        End SyncLock
        Monitor.Exit(lockItem)
    End Sub
Der Code innerhalb
 
        SyncLock (_locks.SyncRoot)
            ' Code...
        End SyncLock
wird dann nur von einem Thread ausgeführt werden, um Hashtable (und dadrin enthaltene Objekte)) gegen gleichzeitigen Zugriffe zu schützen.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Multithreading1.014Mr.scHlumPf29.01.04 17:56
Re: Multithreading607WaldiMaywood29.01.04 18:04
Re: Multithreading540Mr.scHlumPf29.01.04 18:37
Geht das SO ????521Mr.scHlumPf29.01.04 18:43
Re: Geht das SO ????554WaldiMaywood29.01.04 23:41
Re: Geht das SO ????564WaldiMaywood30.01.04 12:48
Re: Geht das SO ????584ModeratorDaveS30.01.04 13:31

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel