Tenho um objeto A que contém vários campos que precisam ser sincronizados. Eu quero fazer cumprir a seguinte propriedade:
1) Mais de um thread pode ler os campos do objeto de cada vez. 2) Se pelo menos um thread estiver lendo do objeto, o objeto não pode ser modificado. 3) Se o objeto está sendo modificado, nenhum thread pode ler do objeto.
Em outras palavras, quero uma fechadura de forma que qualquer número de leitores possa segurá-la. Mas, se algum escritor segura a fechadura, nada mais pode segurá-la.
Como faço isso? Estou usando C ++, mas espero que haja uma maneira independente de linguagem de fazer isso.
O conceito que você está procurando é um Readers-Writer-Lock . Existem implementações C ++ por aí, mais notavelmente uma em boost :: thread . A ideia é que você use um único mutex (lógico, frequentemente implementado internamente usando dois mutexes) para leitura e gravação que você pode atualizar para exigir bloqueio exclusivo (quando você escreve) e que vários leitores podem bloquear simultaneamente ao ler a partir dele.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras