Ir ao conteúdo
  • Cadastre-se

C é possivel 2 fopen ao mesmo tempo no mesmo arquivo?


codigo rapido
Ir à solução Resolvido por V!OLADOR,

Posts recomendados

Pelo que andei lendo, é posivel sim. Mas exige certos procedimentos que me parecem ser complexos de mais. Algo arriscado e que não compensa.

Pelo que imagino o que devo fazer se tiver várias threads necessitando de algo assim, eu tenho que colocar cada pedido de leitura e/ou gravação em um tipo de pilha que irá sendo executada na sequencia, atendendo cada thread uma por uma.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução
12 horas atrás, codigo rápido disse:

É possivel usando threads que um mesmo arquivo possa ser aberto ao mesmo tempo por dois fopens?


A resposta curta é sim. Agora, faria sentido? depende do problema.

Um disco é um recurso físico e inerentemente sequencial, independente do modelo de programação utilizado ou do número de processos/threads executando ao mesmo tempo. Não há como ler duas coisas ao mesmo tempo. Num disco rígido por exemplo, ou a agulha tá num local ou noutro. Num SSD há acesso direto e virtualmente sem tempo de resposta mas ainda assim um processo físico de escritura. O sistema operacional vai tentar otimizar a tarefa utilizando algum tipo de cache e que permite uma ilusão de que vários processos/threads tão utilizando o disco em paralelo.

Na pior das hipóteses, tentar escrever ao mesmo tempo vai destruir a performance do programa porque as threads vão precisar sincronizar-se numa fila. Um resultado contra intuitivo se tá tentando usar várias threads exatamente pra aumentar a velocidade do programa.

Geralmente, é mais eficiente e inteligente criar um modelo de utilização. Se você for fiel ao próprio modelo, tudo vai funcionar sem problemas. Por exemplo, criar uma cache na RAM pra cada thread, guardar informações ali por enquanto e apenas transferir cada cache pro disco a posteriori sequencialmente. Vira e mexe, sempre que lidamos com largura de banda e latência, sai mais barato transferir um pedaço grande de informação uma vez do que vários pedaços pequenos. Outra ideia seria ter uma "thread-escrivã" e apenas ela seria responsável por escrever no disco. As demais mandariam informações pra escrivã e essa trata de escrever quando achar apropriado. O mesmo pra leitura e/ou ler-escrever. 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

13 horas atrás, codigo rápido disse:

É possivel usando threads que um mesmo arquivo possa ser aberto ao mesmo tempo por dois fopens?
Um fopen para leitura e outro fopen para escrita?
 

 

Sim. É possível e muito comum. Pode ser um único thread ou não. Os sistemas tem mecanismos de FILE LOCKING e RECORD LOCKING  que travam uma região do disco ou da memória para gravação ou leitura e o próprio sistema sincroniza o acesso.  

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

3 horas atrás, V!OLADOR disse:

Outra ideia seria ter uma "thread-escrivã" e apenas ela seria responsável por escrever no disco. As demais mandariam informações pra escrivã e essa trata de escrever quando achar apropriado. O mesmo pra leitura e/ou ler-escrever. 


Sim! É isso mesmo.
Valeu pelas dicas!

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!