Preciso proteger o acesso de leitura a um contêiner STL em um ambiente multithreading?

Eu tenho um contêiner std :: list <> e esses tópicos:

Um segmento de gravador que adiciona elementos indefinidamente.

Um segmento de leitor / gravador que lê e remove elementos enquanto disponíveis.

Vários threads de leitor que acessam o SIZE do contêiner (usando o método size ())

Existe um mutex normal que protege o acesso à lista dos dois primeiros threads. Minha pergunta é: os segmentos do leitor de tamanho também precisam adquirir esse mutex? devo usar um mutex de leitura / gravação?

Estou em um ambiente Windows usando o Visual C ++ 6.

Atualizar: Parece que a resposta ainda não está clara. Para resumir a principal dúvida: Ainda preciso proteger os threads do leitor SIZE, mesmo que apenas chamem size () (que retorna uma variável simples), levando em consideração que eu não preciso do valor exato (ou seja, posso assumir uma +/- 1 variação)? Como uma condição de corrida pode fazer com que minha chamada de size () retorne um valor inválido (ou seja, um totalmente não relacionado ao bom)?

Responda: Em geral, os encadeamentos do leitor devem ser protegidos para evitar condições de corrida. No entanto, na minha opinião, algumas das perguntas mencionadas acima na atualização ainda não foram respondidas.

Desde já, obrigado!

Obrigado a todos por suas respostas!

questionAnswers(8)

yourAnswerToTheQuestion