2011-03-23 3 views
0

Je joue avec des discussions. J'ai une question et je pense que son très simple: LesQuestion de synchronisation de fil

J'ai une classe:

Class Message { 
    public WriteMsg(string msg) 
    { 
     Console.Writeline(msg); 
    } 
} 

Je crée un objet de cette classe

Message msg = new Message(); 

Maintenant, je crée dix fils et passe cet objet message à la fonction exécutée par les dix threads. Chacun passera son index de thread à writemsg, qui sera écrit dans stdout. J'ai écrit et testé l'application et ses index de thread d'écriture 1 à 10.

Comme vous pouvez le voir, je n'ai pas implémenté aucune sorte de synchronisation. Si la classe ne fait que la fonctionnalité mentionnée ci-dessus, ai-je besoin d'un mécanisme de verrouillage pour accéder à l'objet dans les threads?

Répondre

0

Vous devez synchroniser les threads s'ils travaillent avec des variables partagées.
Dans votre exemple simple, il n'y a pas de variable partagée. Donc, aucune synchronisation n'est nécessaire

+0

@ user384706 J'ai une autre question de suivi. Je lisais dans le pool de threads asp.net, qui spécifiait que vous pouviez créer 5 threads de travail et environ 1000 threads d'E/S, mais vous ne pouvez créer qu'un nombre de threads correspondant à un core. L'implémentation du framework asp.net serait-elle aussi un thread utilisateur pour le mappage des threads du noyau? –

+0

@ asp.nerd: Je ne sais pas sur asp.net.Generally bien que vous n'êtes pas censé commencer un nombre de threads, car plus les threads plus le concours pour accéder au processeur est élevé, plus la performance est mauvaise. Sauf si les fils sont bloqués pendant de longues périodes, par ex. pour I/OI suppose que c'est le modèle que vous décrivez dans asp.net, c'est à dire que les threads de travail devraient être à peu près autant que CPU et pas plus pour avoir de la concurrence et pour les threads assignés aux tâches avec beaucoup de blocage number.Hope cela aide. – Cratylus

0

Cela dépend de ce que vous faites si ce sont des méthodes qui modifient ou lisent des objets non-atomiques que oui. Pour votre cas, ce n'est pas nécessaire.