Mon scénario particulier: - Le thread principal démarre un thread de travail. - thread principal doit se bloquer jusqu'à ce thread de travail est terminé (oui drôle) ou thread de travail lui-même informe thread principal pour aller surMonitor.Wait, Pulse - Lorsque le thread de travail doit se comporter comme un thread de travail sous conditions
Bon, ce que je l'ai fait en fil principal:
wokerThread.Start(lockObj);
lock(lockObj)
Monitor.Wait(lockObj);
Quelque part en fil des travailleurs:
if(mainThreadShouldGoOn)
lock(lockObj)
Monitor.Pulse(lockObj);
en outre, à la fin du thread de travail:
lock(lockObj)
Monitor.Pulse(lockObj);
Jusqu'à présent, cela fonctionne parfaitement. Mais est-ce une bonne solution? Y en a t-il un meilleur?
EDIT:
Et si je le fais comme ça dans thread principal:
Monitor.Enter(lockObj);
workerThread.Start(lockObj);
Monitor.Wait(lockObj);
Et travailleur ressemble à ceci:
void Worker(object lockObj)
{
Monitor.Enter(lockObj);
...
...
...
if(mainThreadShouldGoOn)
{
Monitor.Pulse(lockObj);
Monitor.Exit(lockObj);
}
...
...
...
if(!mainThreadShouldGoOn)
{
Monitor.Pulse(lockObj);
Monitor.Exit(lockObj);
}
}
Salut, merci pour votre réponse détaillée. Sur la base de vos suggestions, j'ai révisé ma solution.S'il vous plaît voir modifier dans mon message original. –