Concorrência de leitura e gravação

azani

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.

jupp0r

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.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Soquete de leitura e gravação simultaneamente

Leitura e gravação de dados EXIF

Leitura e gravação de dados EXIF

arquivo de leitura e gravação php

Arquivos de leitura e gravação Python

Android - Leitura e gravação de arquivo

Arquivo de sequência de leitura e gravação do Hadoop MapReduce

Concorrência CoreData e objetos de liberação

Alta latência de leitura e gravação em cassandra 2.2.6

Aumentos de latência de leitura e gravação do hub de eventos do Azure Functions com StorageException e SocketException

Aumentos de latência de leitura e gravação do hub de eventos do Azure Functions com StorageException e SocketException

Arquivos externos de sincronização Java, leitura e gravação

Exclusão de leitura e gravação com canais

função de leitura, gravação e as_bytes

Chamadas de sistema Unix: leitura / gravação e o buffer

Problema de dataframe de leitura e gravação do SparkR

Ferrugem: desempenho de leitura e gravação de CSV

compartilhamento de bloqueio de leitura e gravação entre processos

Por que precisamos de barreiras de leitura e gravação?

Byte de leitura e gravação de memória

Consistência de gravação / leitura do modo Firestore Datastore

Como equilibrar threads de leitura e gravação em .NET

Id do aplicativo e leitura / gravação de arquivos

Leitura e gravação de matriz em ambiente multithread

Redis / java - gravação e leitura de dados binários

Java: leitura e gravação de arquivo CSV

Arquivo binário de leitura e gravação C

Python: leitura e gravação de vários arquivos

Acelerando a leitura de InputStream e a gravação com FileOutputStream