Como você faz um bloqueio entre processos no Linux (C / C ++)?

7

Preciso ter certeza de que um processo seja executado somente em uma instância por vez. No Windows, você poderia usar o mutex nomeado. Mas não tenho ideia do que usar no Linux.

Acho que já vi uma abordagem onde o aplicativo cria um arquivo exclusivo, mas não consigo mais encontrá-lo. Você usa funções regulares de arquivo, ocupado-loop?

    
por Coder 15.09.2011 / 11:18

2 respostas

7

Se você quiser apenas uma instância do seu aplicativo em execução, poderá usar um arquivo de bloqueio. Abra com os sinalizadores O_CREAT | O_EXCL e ele falhará se o arquivo já existir.

Se você quiser sincronizar o acesso a um arquivo, use o flock . Também é possível bloquear partes de arquivos com fcntl . O flock é apenas para bloqueio consultivo, o que significa que um programa pode ignorar os bloqueios e acessá-lo de qualquer maneira. O bloqueio obrigatório é possível com fcntl, mas requer uma opção de montagem especial e permissões especiais de arquivo.

semget e semop também pode ser usado para sincronização entre processos.

    
por 15.09.2011 / 17:25
0

Mutexes interprocessos são uma parte opcional do POSIX (consulte _POSIX_THREAD_PROCESS_SHARED no unistd.h página) e como eles são implementados no Linux você pode usá-los também - veja os exemplos .

    
por 20.05.2016 / 11:42