ReaderWriterLockSlim.EnterUpgradeableReadLock est-() essentiellement les mêmes que Monitor.Enter ()?

StackOverflow https://stackoverflow.com/questions/2745352

Question

J'ai donc une situation où je peux avoir beaucoup, beaucoup de lecture et d'écriture seulement de temps en temps à une ressource partagée entre plusieurs threads.

Il y a longtemps que je lis sur ReaderWriterLock, et avoir lu sur le ReaderWriterGate qui tente d'atténuer le problème où beaucoup écrit à venir dans l'atout et la performance lit mal. Cependant, maintenant je suis devenu conscient de ReaderWriterLockSlim ...

De la documentation, je crois qu'il ne peut y avoir un fil en mode « mise à niveau » à un moment donné. Dans une situation où le seul accès que je utilise est EnterUpgradeableReadLock() (qui est approprié pour mon scénario) est alors il beaucoup de différence à coller juste avec lock(){}?

Voici l'extrait:

  

Un fil qui tente d'entrer   blocs en mode de mise à niveau s'il y a   déjà un fil en mode évolutif,   s'il y a des threads en attente d'entrer   en écriture, ou s'il y a un seul   le fil en mode d'écriture.

Ou, est la politique de récursion faire une différence à cela?

Était-ce utile?

La solution

D'accord. Si tous de vos fils ont besoin d'acquérir un verrou de lecture upgradable et vous ne pouvez pas se permettre de libérer un verrou de lecture et un verrou d'écriture alors ReaderWriterLockSlim aucune amélioration sur simple verrou exclusif . Récursion ne change pas. RWLS et la nécessité d'éviter le danger toujours présent d'impasse favorise fortement un modèle où un seul thread fait l'écriture.

Autres conseils

Je n'ai pas toutes vos réponses, mais je vais donner un coup de feu:

L'instruction lock en C # est le sucre syntaxique pour appeler Monitor.Enter et Monitor.Exit. L'effet est qu'un seul thread peut accéder au code dans la serrure à la fois.

lock()
{
  //only one thread can access this code at a time
}

Le problème avec ceci est que plusieurs lectures sont inoffensifs, mais des blocs de verrouillage () de toute façon. ReaderWriterLockSlim permet plusieurs lectures, une seule écriture. Il est une tentative d'améliorer l'efficacité.

La politique de récursion est quelque chose que vous devez spécifier - par défaut, il est désactivé. Je ne sais pas trop beaucoup plus au-delà, mais l'espoir qui aide un peu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top