2010-01-19 3 views
0

J'ai une liste d'objets, pour chaque objet que je veux exécuter un thread totalement séparé (thread safty), comme .... Je vais choisir un objet de ma liste dans while loop et exécuter un thread puis pour l'objet suivant, exécutez les threads suivants ... tous les threads doivent être synchronisés de sorte que les ressources (valeurs/connexion (close/open)) partagées par eux ne doivent pas changer .....Synchronisation de thread

+1

Y a-t-il une question? –

Répondre

2

Commencer un fil per objet n'est pas nécessairement sage; vous devriez probablement avoir un petit nombre de threads de travail choisissant des éléments de la liste (ou mieux, un Queue<T>), synchronisant l'accès à cette liste/file d'attente. Un exemple de file d'attente thread-safe peut être trouvé dans this thread.

Une fois que a un élément de travail, il n'y a pas de solution miracle pour rendre le reste du code que vous écrivez (pour le traiter) thread-safe. Une approche raisonnable qui garde les choses simples est l'immuabilité - soit l'immuabilité réelle (les éléments ne peuvent pas changer), soit simplement ne change pas l'objet. Vous pouvez bien sûr implémenter le verrouillage autour de l'élément de travail, mais cela ne sert qu'à tous votre code utilise la même stratégie de verrouillage, ce qui est difficile à appliquer.

0

je vais choisir un objet de ma liste dans while et exécuter un fil et alors pour objet suivant exécuter les prochaines discussions

Si je voulais vraiment un fil par objet, Je ne serais probablement pas, je créerais une classe comme ceci:

class ObjectProcessingThread 
{ 
Thread processingThread = new Thread(); 
public TargetObject { get; set;} 

public Start() 
{ 
    //start the processing thread with threadEntryPoint as the work the thread will do 
} 

private threadEntryPoint 
{ 
    //do stuff with targetObject 
} 
} 

puis dans la boucle while nouvelle jusqu'à un ObjectProcessingThread pour chaque objet, la mise en sa propriété TargetObject, puis Callin g Commencez.

tous les fils doivent être synchronisés tels que les ressources (valeurs/connexion (fermeture/ouverture)) partagée par les devrait pas changer .....

Si vous ne voulez pas les valeurs à changer, ne les changez pas.

Questions connexes