2013-09-05 1 views
0

J'ai lu récemment la source de LevelDB, l'URL source est https://leveldb.googlecode.com/files/leveldb-1.13.0.tar.gzQuel est le sens de mutex_.AssertHeld() dans la source de LevelDB

Et quand je lis db/db_impl.cc, il vient le code suivant:

mutex_.AssertHeld() 

je suis dans le port de fichier/port_posix.h, et je trouve ce qui suit:

void AssertHeld() { } 

Je grep dans la souce dir, mais ne peut pas trouver anyother mise en œuvre du AssertHeld() anymo ré. Alors voici ma question, que fait le mutex_.AssertHeld() dans db/db_impl.cc? Comme vous avez pu le constater, cela ne fait rien dans l'implémentation par défaut.

Répondre

0

La fonction semble être un espace réservé pour vérifier si un thread particulier détient un mutex et éventuellement abandonner si ce n'est pas le cas. Cela serait équivalent aux affirmations normales que nous utilisons pour les variables, mais appliquées aux mutex.

Je pense que la raison pour laquelle elle n'est pas encore implémentée est que nous n'avons pas de fonction de poids léger équivalente pour affirmer qu'un thread contient un verrou dans pthread_mutex_t utilisé dans l'implémentation par défaut. Certaines plates-formes qui ont cette capacité pourraient remplir cette implémentation dans le cadre du processus de portage. Recherche en ligne J'ai trouvé une implémentation pour cette fonction dans le port windows de leveldb. Je peux voir une façon de l'implémenter en utilisant une classe wrapper sur pthread_mutex_t et en définissant une sorte de variable d'identifiant de thread pour indiquer quel thread détient actuellement le mutex, mais il devra être soigneusement implémenté étant donné les conditions de course qui peuvent survenir .

Questions connexes