O bloqueio, o mutex e o semáforo estão entre os threads ou entre os processos?

2

Eu acho que lock, mutex, semáforo são usados para múltiplos sincronizados (threads ou processos?) para acessar algo simultaneamente.

Deve este "algo" ser alguma memória compartilhada entre múltiplos (threads ou processos)?

Se sim, isso significa lock, mutex, semáforo são usados apenas para vários threads de um processo, não para múltiplos processos, porque vários processos não compartilham memória, enquanto vários threads do mesmo processo fazem?

Obrigado.

    
por Tim 09.08.2014 / 19:56

1 resposta

4

Are lock, mutex, and semaphore for between threads or between processes?

Você encontrará exemplos de primitivos de bloqueio para ambas as situações. Por exemplo, mutexes pthread são usados para exclusão mútua entre encadeamentos do mesmo processo. Por outro lado, os semáforos System V IPC ( man svipc ) podem ser usados processos. Os bloqueios no nível do sistema de arquivos (em arquivos ou partes de arquivos) também podem ser usados para coordenar entre vários processos.

Must this "something" be some shared memory between multiple (threads or processes)?

Não necessariamente memória compartilhada. Qualquer tipo de recurso pode ser protegido com primitivas de sincronização. Uma parte da memória compartilhada (compartilhada entre processos e / ou threads) é talvez o exemplo mais comum, mas outras coisas como identificadores de arquivo (bloquear um arquivo inteiro ou partes de um arquivo ou outros tipos de "identificadores" para recursos exclusivos) ) e acesso a dispositivos de hardware também são possíveis.

If yes, does that mean lock, mutex, semaphore are only used for multiple threads of a process, not for multiple processes, because multiple processes don't share memory, while multiple threads of the same process do?

Bem, não. Processos podem compartilhar memória. (E, na verdade, a maioria faz isso, ainda que apenas de uma maneira somente leitura - as páginas que contêm o código da biblioteca compartilhada são compartilhadas entre processos. Isso não precisa de proteção. Os mapeamentos compartilhados copy-on-write são feitos quando os forking precisam de proteção, mas o kernel lida com isso de forma transparente - isso envolve bloqueios nos mapeamentos de memória compartilhada, o que é conceitualmente um pouco diferente dos bloqueios comuns que protegem uma região de memória / estrutura de dados.)

Qualquer outra coisa que processos ou threads possam compartilhar (quando pelo menos um deles pode escrever) precisa de proteção / coordenação, arquivos e dispositivos sendo os dois mais comuns que eu acho.

    
por 09.08.2014 / 20:19