Guia de rastreamento dinâmico Solaris

Testes de bloqueio de leitores/gravador

Os bloqueios de leitor/gravador forçam uma política de permissão de vários leitores ou um único gravador, mas não ambos, em uma seção crítica. Estes bloqueios são geralmente usados para estruturas que são pesquisadas mais freqüentemente do que modificadas, e para as quais existe tempo substancial na seção crítica. Se os tempos de seção crítica forem curtos, os bloqueios de leitor/gravador serão implicitamente serializados na memória compartilhada usada para implementar o bloqueio, o que não dá a eles nenhuma vantagem sobre os bloqueios adaptativos. Consulte rwlock(9F) para obter mais detalhes sobre bloqueios de leitores/gravador.

Os testes que pertencem aos bloqueios de leitores/gravador estão na Tabela 18–4. Para cada teste, arg0 contém um ponteiro para a estrutura krwlock_t que representa o bloqueio adaptativo.

Tabela 18–4 Testes de bloqueio de leitores/gravador

rw-acquire

Teste de evento de manutenção que é acionado imediatamente depois que um bloqueio de leitores/gravador é adquirido. arg1 conterá a constante RW_READER, se o bloqueio tiver sido adquirido como um leitor, e RW_WRITER se o bloqueio tiver sido adquirido como um escritor.

rw-block

Teste de evento de contenção que é acionado depois que um segmento bloqueado em um bloqueio de leitores/gravador mantido foi acionado novamente e adquiriu o bloqueio. arg1 contém a duração do tempo (em nanossegundos) que o segmento atual teve que ficar inativo para adquirir o bloqueio. arg2 conterá a constante RW_READER, se o bloqueio tiver sido adquirido como um leitor, e RW_WRITER se o bloqueio tiver sido adquirido como um escritor. arg3 e arg4 contêm mais informações sobre o motivo do bloqueio. arg3 será diferente de zero, se e somente se o bloqueio foi mantido como um escritor quando o segmento atual foi bloqueado. arg4 contém a contagem de leitores quando o segmento atual foi bloqueado. Se os testes rw-block e rw-acquire estiverem ativados, rw-block é acionado antes de rw-acquire.

rw-upgrade

Teste de evento de manutenção que é acionado depois que um segmento tiver atualizado com êxito um bloqueio de leitores/gravador a partir de um leitor para um gravador. As atualizações não possuem um evento de contenção associado porque elas só são possíveis através de uma interface de não-bloqueio, rw_tryupgrade(9F).

rw-downgrade

Teste de evento de manutenção que é acionado depois que um segmento tiver feito downgrade de sua propriedade de um bloqueio de leitores/gravador de gravador para leitor. Os downgrades não possuem um evento de contenção associados porque eles sempre acontecem sem contenção. 

rw-release

Teste de evento de manutenção que é acionado imediatamente depois que um bloqueio de leitores/gravador é liberado. arg1 conterá a constante RW_READER, se o bloqueio liberado tiver sido mantido como um leitor, e RW_WRITER se o bloqueio liberado tiver sido mantido como um gravador. Devido aos upgrades e downgrades, o bloqueio pode não ter sido liberado quando foi adquirido.