Manuel de suivi dynamique Solaris

Sondes de verrouillage en lecture/écriture

Les verrouillages en lecture/écriture appliquent une stratégie d'autorisation de plusieurs lecteurs ou d'un seul rédacteur — mais pas les deux — dans une section critique. Ces verrous sont généralement utilisés pour les structures plus fréquemment recherchées que modifiées et pour lesquelles la durée est importante dans la section critique. Si les durées de section critique sont courtes, les verrouillages en lecture/écriture sont implicitement placés en série sur la mémoire partagée utilisée pour mettre en œuvre le verrou, aucun avantage sur les verrous adaptatifs ne leur étant accordé. Pour plus d'informations sur les verrouillages en lecture/écriture, reportez-vous à rwlock(9F).

Les sondes appartenant à des verrouillages en lecture/écriture sont répertoriées dans le Tableau 18–4 Pour chaque sonde, arg0 contient un pointeur vers la structure krwlock_t qui représente le verrou adaptatif.

Tableau 18–4 Sondes de verrouillage en lecture/écriture

rw-acquire

Sonde d'événement de maintien se déclenchant immédiatement après l'acquisition d'un verrou en lecture/écriture. arg1 contient la constante RW_READER si le verrou a été acquis en tant que lecteur, et RW_WRITER s'il a été acquis en tant que rédacteur.

rw-block

Sonde d'événement de contention se déclenchant après qu'un thread bloqué sur un verrou en lecture/écriture maintenu s'est réveillé et après l'acquisition du verrou. arg1 contient la durée (en nanosecondes) pendant laquelle le thread actuel doit sommeiller pour acquérir le verrou. arg2 contient la constante RW_READER si le verrou a été acquis en tant que lecteur, et RW_WRITER s'il a été acquis en tant que rédacteur. arg3 et arg4 contiennent plus d'informations sur le motif du blocage. arg3 n'est pas de zéro si et seulement si le verrou était maintenu en tant que lecteur au moment du blocage du thread actuel. arg4 contient le nombre de lecteurs au moment du blocage du thread actuel. Si les deux sondes rw-block et rw-acquire sont activées, rw-block se déclenche avant rw-acquire.

rw-upgrade

Sonde d'événement de maintien se déclenchant après qu'un thread a mis à niveau un verrou en lecture/écriture de lecture à écriture. Les mises à niveau ne comprennent pas d'événement de contention associé, car cela n'est possible que via une interface non bloquante, rw_tryupgrade(9F).

rw-downgrade

Sonde d'événement de maintien se déclenchant après qu'un thread a rétrogradé sa propriété de verrou en lecture/écriture de écriture à lecture. Les mises à niveau inférieures ne comprennent pas d'événement de contention associé car elles réussissent toujours sans contention. 

rw-release

Sonde d'événement de maintien se déclenchant immédiatement après la libération d'un verrou en lecture/écriture. arg1 contient la constante RW_READER si le verrou libéré a été maintenu en tant que lecteur, et RW_WRITER s'il a été maintenu en tant que rédacteur. En raison des mises à niveau et rétrogradations, le verrou peut ne pas être libéré comme il a été acquis.