2009-05-05 2 views
1

La fonction ConcurrentHashMap de JDK utilise une technique de barrage-barrage. C'est une bonne idée de minimiser les frais généraux de verrouillage. Y a-t-il d'autres bibliothèques ou outils qui en profitent? Par exemple, le moteur de base de données l'utilise-t-il?Zone d'application du verrouillage par barrette

Si la technique n'est pas tellement utile dans d'autres domaines, quelle est la limite?

Répondre

4

La segmentation de verrouillage est utile lorsqu'il existe un moyen de rompre un verrou de contention élevé dans plusieurs verrous sans compromettre l'intégrité des données. Si cela est possible ou non, il faut réfléchir et ce n'est pas toujours le cas. La structure de données est également le facteur contribuant à la décision. Donc, si nous utilisons un grand tableau pour implémenter une table de hachage, l'utilisation d'un seul verrou pour l'ensemble de la table de hachage pour la synchroniser conduira les threads à accéder séquentiellement à la structure de données. Si c'est le même endroit sur la table de hachage, alors c'est nécessaire mais, et s'ils accèdent aux deux extrêmes de la table.

Il y a définitivement beaucoup de gain de temps en utilisant le striping lock. Les exécutions multiples d'un scenario donnent presque deux fois le temps d'exécution. Le côté négatif de la bande de verrouillage est qu'il est difficile d'obtenir l'état de la structure de données qui est affectée par la segmentation. Dans l'exemple, la taille de la table, ou essayer d'énumérer/énumérer la table entière peut être lourde car nous devons acquérir tous les verrous à rayures.

Questions connexes