2009-02-18 12 views
6

Disons que j'ai trois threads qui ont besoin d'accéder à une collection et j'utilise un bloc de verrouillage autour de l'accès dans chaque thread. Ce qui suit se passe ...Déclaration de verrouillage C#

(1) Discussion 1 obtient le verrou sur la collection
(2) Discussion 2 est bloqué
(3) Discussion 3 est bloqué

Quand le fil 1 libère le verrou, qui va prendre la serrure ensuite? Est-ce l'accès FIFO?

Merci

Répondre

17

Vous ne devriez pas vous soucier de savoir qui aura le verrou suivant.

+2

Vous pourriez prolonger cela pour dire que vous ne pouvez pas vous en soucier. Peut être. – JMD

+0

Je me rends compte que je devrais programmer les fils de façon à ce que je m'en fiche, je me demande juste quel est le mécanisme. –

+2

http://msdn.microsoft.com/en-us/library/aa645740(VS.71).aspx#vcwlkthreadingtutorialexample4mutex "La vitesse et le système d'exploitation de la machine exécutant l'échantillon peuvent affecter l'ordre de sortie." –

4

En supposant que c'est comme Win32 alors la réponse est que ce pourrait être FIFO mais il pourrait ne pas (ce soit quelque chose d'autre). Par exemple, un thread de priorité plus élevée devrait être le premier; mais les threads peuvent obtenir une amélioration ou une baisse temporaire de leur priorité en fonction de ce qu'ils ont fait récemment.

+0

D'après ce que j'ai lu, c'est correct. La serrure peut être pensée de FIFO, mais elle n'est pas garantie. –

5

Votre question implique que vous recherchez un comportement FIFO? Ensuite, vous pouvez essayer ce code par Jakub Sloup:

Monitor/lock which remember order in C# to simulate FIFO

Comme nous l'avons mentionné dans les autres réponses il n'y a pas d'ordre garanti threads en attente recevront un verrou.

+0

Lien cassé, malheureusement. –

4

En réponse à votre question, tous les threads reçoivent le monitor.pulse qui se disputera ensuite pour savoir qui aura le verrou suivant.

Je crois que les gens de wintellect ont écrit un blog sur la façon dont ce comportement pourrait mener à une situation injuste, mais il n'y a aucune équité dans le moniteur.

3

La réponse est par définition, indéterminée.

Questions connexes