J'ai pris les points suivants de cette API et j'aimerais connaître la différence entre les 2 points suivants: p>
Les fils d'attente sont signalés dans l'ordre FIFO. P> li>
la commande de la réacquisition de verrouillage pour les fils revenant de Les méthodes d'attente sont les mêmes que pour les threads acquérir initialement le Verrouiller, qui se trouve dans le cas par défaut non spécifié, mais pour des serrures équitables favorise ces threads qui attendent le plus long. p> li> ol> blockQuote>
Il est lié à
de la classe code> qui est généralement renvoyé par la méthode ReentrantLock
.Newconition () code>, et le bit que j'ai cité, il explique la différence entre les méthodes de < Code> Condition code> et les méthodes de moniteur ordinaires de la classe d'objets. P>
"Les fils d'attente sont signalés dans l'ordre de la FIFO". Je pense que tant que le verrouillage code> est créé de manière équitable ou non, le fait que les filets d'attente soient signalés dans une commande FIFO est totalement non pertinent. Parce que de toute façon, il est de savoir s'ils ont été construits, équitables ou non, ce qui décide comment ils sont mis en file d'attente. P>
Demander simplement une confirmation. P>
Merci d'avance. P>
3 Réponses :
S'il vous plaît voir ci-dessous les réponses à vos questions: P>
1. Les threads d'origine sont signalés dans l'ordre FIFO. P> blockQuote>
Lorsque nous invoquons une méthode de condition attendue (), le fil passe dans l'état d'attente, la déclaration ci-dessus fait référence à la manière dont ces threads en attente sont signalés. Donc, si les threads T1 sont allés à l'état d'attente avant T2, T1 sera signalé avant T2. P>
2.Le commande de repérage de verrouillage pour les threads revenir à partir de méthodes d'attente est la même que pour les threads acquérir initialement la serrure, qui figure dans le cas par défaut non spécifié, mais pour les verrous équitables favorise ces threads qui attendent le plus long. p> blockQuote>
Continuation de la déclaration ci-dessus, lorsque le fil d'attente est signalé, il a tendance à revenir à la serrure. Bien que la déclaration ci-dessus indique que T1 soit signalée avant T2, mais lorsqu'il s'agit de réactiver le verrouillage, l'ordre de réacquisition utilise des concepts définis par verrouillage. Donc, cela dépend de la création de l'objet de verrouillage. Lors de la création de verrouillage, vous avez peut-être spécifié un paramètre d'équité: p>
reentrantlock (foire booléenne) code> p>
Si oui, ce paramètre est utilisé, sinon le comportement des verrous par défaut se produit, vous pouvez en savoir plus sur les serrures de retrantlock sur ce link p>
Il pourrait y avoir plus d'explications à ces déclarations, vient d'essayer de mieux comprendre mon compréhension ici. En espérant avoir été capable de clarifier. P>
acclamations !! p>
Tant que le verrouillage est créé soit juste, soit non, le fait que les fils d'attente sont signalés dans une commande FIFO est totalement non pertinent, n'est-ce pas? Parce que de toute façon, il est de savoir s'ils ont été construits, équitables ou non, ce qui décide comment ils sont mis en file d'attente. P> blockQuote>
Je pense que c'est pertinent. P>
Considérez un scénario sur lequel T1 et T2 attendent une condition C (avec T1 attente plus longtemps que T2), T3 fonctionne à l'intérieur du moniteur et T4 attend son acquisition de serrure initiale. T3 signaux C et laisse le moniteur relâchant la serrure. Supposons que non parasidie WakeUp em> se produisent. P>
Si la serrure est
Fair forte>, T4 va certainement acquérir la serrure avant T1, mais le fait que les fils d'attente soient signalés dans l'ordre FIFO vous garantissent que T1 acquérira la serrure avant T2. p> En outre, si la serrure est
pas juste forte>, nous ne pouvons pas dire quel thread va acquérir la serrure d'abord entre T1 et T4, mais à nouveau, le fait que les fils d'attente soient signalés dans l'ordre de FIFO garantit que T1 va acquérir la serrure avant T2, à condition qu'aucun autre signal ne se produise tant que T1 acquiert la serrure (par exemple au cas où T1 est responsable de la signalisation suivante). P>
Je pense que le code source peut nous donner plus d'indices sur la façon dont cela fonctionne. reentrantlock.Newconition () strong> Renvoie une forte> ConditionObject strong> dans abstractotiesseSynchroniseur strong>. Voici le lien de code source Code source AQS . P>
1. Les threads d'origine sont signalés dans l'ordre FIFO. P>
blockQuote>
Il y a deux files d'attente dans one est destiné à attendre la serrure (appelez simplement la file d'attente de blocage de verrouillage), vous verrez deux variables volatiles Une autre file d'attente est la file d'attente du signal dans la définition de ConditionObject fort>, vous verrez deux variables 2.Le commande de repérage de verrouillage pour les threads revenir à partir de méthodes d'attente est la même que pour les threads acquérir initialement la serrure, qui figure dans le cas par défaut non spécifié, mais pour les verrous équitables favorise ces threads qui attendent le plus long. p>
blockQuote>
Réveillez-vous de la méthode J'espère que cela vous aidera et laissez-moi si je me trompe. P>