Ho fatto un semplice multi-threading in VB.NET per un po 'e sono appena entrato nel mio primo grande progetto multi-thread. Ho sempre fatto tutto usando la dichiarazione Synclock
perché non pensavo ci fosse un modo migliore.Perché utilizzare SyncLocks in .NET per operazioni semplici quando è disponibile la classe Interlocked?
ho appena imparato a conoscere il Interlocked
Class - lo fa sembrare come se tutto questo:
Private SomeInt as Integer
Private SomeInt_LockObject as New Object
Public Sub IntrementSomeInt
Synclock SomeInt_LockObject
SomeInt += 1
End Synclock
End Sub
può essere sostituito con una singola istruzione:
Interlocked.Increment(SomeInt)
Questo gestisce tutto il bloccaggio all'interno e modifica il numero. Sarebbe molto più semplice che scrivere i miei blocchi per operazioni semplici (operazioni più lunghe o più complicate ovviamente hanno ancora bisogno del loro blocco).
C'è un motivo per cui eseguirò il mio blocco personale, utilizzando oggetti di blocco dedicati, quando posso eseguire la stessa operazione utilizzando i metodi Interlocked
?
Potete fornire un esempio di tale situazione? Se sto semplicemente facendo un semplice incremento/decremento (o .Aggiungere se ho bisogno di cambiare il valore di più di 1), sembra che Interlocked sarebbe meglio in tutti i casi. Se ho bisogno di qualcosa di più avanzato (come un processo in 4 fasi in cui ho bisogno di garantire che sia l'unico thread in esecuzione in un dato momento), ho bisogno di alcuni Synclocking. Sono interessato a una situazione in cui Interlocked sembra essere corretto, ma è una cattiva scelta. – SqlRyan
Se stai lavorando con due variabili diverse, 'Interlocked' non è abbastanza. – SLaks