2 votes

Comment synchroniser un nombre entier partagé ?

Je suis assez novice en matière de multithreading en général et j'aimerais savoir comment verrouiller une variable entière partagée pour qu'elle ne soit pas accessible aux autres threads pendant qu'elle est lue/mise à jour par un autre thread.

Quand j'essaie de faire SyncLock myInteger Je reçois cette erreur : Erreur 6 L'opérande 'SyncLock' ne peut pas être de type 'Integer' car 'Integer' n'est pas un type de référence.

Voici un exemple simplifié de ce que je veux dire

Private Shared myInteger As Integer

Private Sub MySub()
  SyncLock myInteger ' This does not work
    ' read/write a new value to myInteger
  End SyncLock
End Sub

MySub est appelé par plusieurs instances de la classe, et fonctionne dans plusieurs threads.

9voto

Jon Skeet Points 692016

Je soupçonne que vous ne comprenez pas bien ce que SyncLock fait. Même si vous pourrait le faire (si Integer était un type de référence, par exemple), vous ne pourriez pas veulent pour le faire - parce que lorsque vous avez remplacé la valeur de myInteger la serrure serait inutile.

Vous devez soit verrouiller quelque chose d'autre (personnellement, je déclare généralement une variable séparée, en lecture seule, uniquement pour le verrouillage, généralement de type Object ) ou si vous seulement veulent opérer sur myInteger à tout moment (plutôt qu'une opération composée qui doit lire ou mettre à jour plusieurs variables en même temps), utilisez la fonction Interlocked classe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X