Pergunta

Eu tenho 10 processos em execução, cada escrita para o mesmo arquivo. Eu não quero vários escritores, então basicamente eu estou procurando um mutex / binário semáforo a gravações de arquivo proteger. O problema é que não posso compartilhar o semáforo entre 10 processos, assim que eu estou olhando para usar memória compartilhada entre os 10 processos, e colocar o semáforo dentro da memória compartilhada para que ele possa ser acessado por cada processo.

Alguém pode apontar-me a documentação sobre isso em C / C ++ para Unix? Código de exemplo para usar essa estrutura seria ótimo.

Graças

Foi útil?

Solução

Parece que você estaria melhor fora de usar flock(2):

flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);

Outras dicas

Colocar um semáforo na memória compartilhada não é a melhor solução para este problema (se ele iria mesmo trabalhar em tudo). Você deve investigar o bloqueio de arquivos, que é uma característica UNIX especificamente concebido para proporcionar exclusividade entre os escritores de arquivo.

Especificamente, confira:

Para mais material explicativo, consulte Programação avançada no UNIX Ambiente, seção 14.3

Dê uma olhada Vol Programação Rede UNIX. 2 por W. Richard Stevens.

É um melhor livro já escrito sobre este assunto.

Você pode usar mutexes pThread. Enquanto initilazing um mutex você precisa usar pthread_mutexattr_setpshared função para fazer o mutex compartilhados entre processos e, em seguida, colocar isso dentro de uma memória compartilhada. Todos os processos podem anexar a memória compartilhada e, em seguida, acessar o mutex.

Além disso, você pode adicionar atributos adicionais para o SHM baseado em sua exigência de bloqueio (recursivo, etc.,)

Que tal usar UNIX IPC para criar uma fila compartilhada. Um processo lê a fila e grava em arquivo, todos os outros processos que empurram dados em fila.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top