Auteur de questions
Multi Thread Lock + Sleep

Discussion générale
-
Bonjour à tous,
Voila j'ai un petit problème dont je dois avouer ne pas comprendre l'origine.
J'ai 3 Thread qui remplisse une Queue<Guid> (à raison de 1000 Guid chacun). et j'ai 2 thread qui les récupère pour les insérer dans une DB.
Je verrouille la Queue le temps de récuperer un élément si celle-ci en contient et je libère le verrou rapidement pour continuer mon process. S'il n'a pu en retirer un, je demande au sous Thread de dormir une demi seconde.
Résultat avec le Sleep j'ai 2800 à 2950 insertions dans la DB -> en enlevant le sleep 3000 à chaque fois.
Je sèche, une idée?
private void ActionThreadOut()
{
int StopCount = 0;
while (true)
{
Guid CurrentValue = Guid.Empty;
lock (GeneratedValue)
{
if (GeneratedValue.Count > 0)
{
StopCount = 0;
CurrentValue = GeneratedValue.Dequeue();
}
else if (StopCount > MaxWaitingLoop)
{
return;
}
else
{
StopCount++;
}
}
if (CurrentValue != Guid.Empty)
{
// Insert Into Database
}
else
{
Thread.Sleep(500);
}
}
}
- Modifié Thierry Morre mardi 11 septembre 2012 11:55
- Type modifié Aurel Bera vendredi 21 septembre 2012 13:22 Pas de reponse
Toutes les réponses
-
Bonjour,
Pourquoi n'utilisez vous pas les événéments (ou les mutex/sémaphore) afin de débloquer un Thread en fonction d'un événement (par exemple si la pile contient un élément).
Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 -
Je serais vous, j'utiliserais les collections de l'espace de noms System.Collections.Concurrent. Cela vous évitera toutes les plomberies de lock & co.
Richard Clark
Consultant - Formateur .NET
http://www.c2i.fr
Depuis 1996: le 1er site .NET francophone -
Bonjour,
Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.
Cordialement,
Aurel
-
Bonjour,
Nous changeons le type de votre question à « Discussion générale » parce que vous n’êtes pas revenu avec les informations sollicitées. Si vous avez plus de temps pour réexaminer la question et fournir plus d'informations, n'hésitez pas à modifier le type du thread à « Question ». Si le problème est résolu, s’il vous plaît partagez la solution avec nous afin que la réponse puisse être trouvée et utilisée par d'autres membres de la communauté ayant des questions similaires. Merci !
Cordialement,
Aurel