2010-06-09 6 views
0

Mon application multithread avec des propriétés en lecture seule doit-elle être verrouillée? Puisque rien n'est écrit, je suppose qu'il n'y a pas besoin de verrous, mais j'aimerais m'en assurer. La réponse à cette question serait-elle agnostique?Application multithread avec propriétés Readonly

Sans verrouillage:

Private Const m_strFoo as String = "Foo" 
Public ReadOnly Property Foo() As String 
    Get 
     return m_strFoo.copy() 
    End Get 
End Property 

Avec Lock:

Private Const m_strBar as String = "Bar" 
Public ReadOnly Property Bar() As String 
    Get 
     SyncLock (me) 
      return m_strBar.copy() 
     End Synclock 
    End Get 
End Property 

Edit: Ajouté Const Les champs

+0

Vos biens sont peut-être en mode readonly mais les données sont-elles en cours? Si la classe elle-même est en train de muter les données, vous pouvez avoir besoin du verrou. Si les données ne changent jamais, vous n'avez pas besoin du verrou. – driis

+0

Je ne connais pas le langage que vous avez écrit, mais il me semble que l'exemple de verrou ne se déverrouillerait jamais ... –

Répondre

0

Le immutable objects correctement conçu est généralement sans danger pour le filetage. Le risque est que "correctement conçu" est un sujet compliqué - voir Peter Veentjer's traitement pour un exemple des pièges de la sécurité thread immuable en Java.

+0

Une synchronisation dans le constructeur devrait résoudre Peter Veentjer exemple de myInt. Article intéressant! –

0

Vous pourriez renoncer à la serrure si le membre de la chaîne ne va jamais changer. Cependant, si vous allez le modifier de temps en temps, la méthode membre public devra synchroniser son accès au membre privé.

+0

Vous pouvez également vous passer de verrous en lisant une valeur, même si elle est changée régulièrement par un autre code, si votre principale préoccupation est la rapidité et non l'exactitude de l'ordre de la millième de seconde. Par exemple. Quand cela ne fait pas vraiment de différence si la réponse est de 2.000.000 ou 2.000.005 ou même 2.000.500. Il en va de même pour les plus petits nombres dans les journaux par exemple. Est-ce que vous vous souciez vraiment de savoir si quelque chose a été demandé 1309 fois ou 1308 fois? Sinon, vous pourriez renoncer à la serrure. –

Questions connexes