2017-10-06 8 views
2

Quel est le but de l'objet dans l'argument Lock. Voici un exemple:But de l'objet en argument de l'instruction Lock

public class TestThreading 
{ 
    private System.Object lockThis = new System.Object(); 

    public void Process() 
    { 

     lock (lockThis) 
     { 
      // Access thread-sensitive resources. 
     } 
    } 

} 

... cet objet 'lockThis' passe-t-il quelque chose dans le corps du verrou. Pourquoi ne puis-je pas utiliser l'instruction Lock sans objet en argument.

+1

Vous avez besoin de * une * variable qui garde la trace du thread qui possède le verrou et à quelle fréquence il a été entré. L'état de verrouillage. System.Object est un type d'objet apparemment inadéquat pour faire toutes ces choses, mais il est capable. Beaucoup de programmeurs ont soutenu que le .NET Framework devrait avoir un type dédié pour ce genre de variable pour apporter de la clarté. Vous pouvez en créer un: public class LockState: object {}. –

+0

Merci. Cela aurait-il un sens si je transmettais "Thread.CurrentThread.ManagedThreadId" dans l'instruction lock à la place. – cembo

+1

Ce serait désastreux. Vous feriez mieux d'étudier ceci ou le filetage va vous manger vivant. –

Répondre

3

L'objet transmis à l'instruction lock peut être considéré comme un identifiant pour le verrou. Pour tout objet, un seul thread peut obtenir un verrou exclusif sur cet objet à un moment donné. En permettant à un objet d'être transmis à l'instruction lock, vous pouvez utiliser différents objets pour différentes zones du code critique.

La documentation Monitor.Enter fournit une meilleure description de l'utilisation de l'objet que la documentation de l'instruction lock.