it-swarm-pt.tech

qual é a diferença entre bloqueios de rotação e semáforos?

Quais são as diferenças básicas entre bloqueios de rotação e semáforos em ação?

15
Renjith G

Ambos gerenciam um recurso limitado. Primeiro, descreverei a diferença entre o semáforo binário (mutex) e o bloqueio de rotação.

Girar bloqueios executar uma espera ocupada - ou seja, ele continua executando o loop:

while (try_acquire_resource ());
...
release();

Ele executa um bloqueio/desbloqueio muito leve, mas se o segmento de bloqueio for antecipado por outro, que tentará acessar o mesmo recurso, o segundo tentará simplesmente adquirir recursos até que ele acabe com os quanta de CPU.

Por outro lado, mutex se comporta mais como:

if (!try_lock()) {
    add_to_waiting_queue ();
    wait();
}
...
process *p = get_next_process_from_waiting_queue ();
p->wakeUp ();   

Portanto, se o encadeamento tentar adquirir o recurso bloqueado, ele será suspenso até que esteja disponível para ele. O bloqueio/desbloqueio é muito mais pesado, mas a espera é 'livre' e 'justa'.

Semáforo é um bloqueio que pode ser usado várias vezes (conhecido na inicialização) por um número de vezes - por exemplo, 3 threads podem manter o recurso apenas, mas não mais. É usado, por exemplo, no problema produtor/consumidor ou em geral nas filas:

P(resources_sem)
resource = resources.pop()
...
resources.Push(resources)
V(resources_sem)
13
Maciej Piechotka

Spinlocks são usados ​​em um contexto de interrupção, onde dormir não é permitido. Eles pesquisam em um circuito fechado, sem fazer mais nada até que o recurso seja adquirido. Usado principalmente em ISRs, e mais seguro e eficiente.

Semáforos podem ser usados ​​em um contexto de processo, onde dormir é bom.

2
Kapil

Aqui está minha rápida resposta a uma resposta: um bloqueio de rotação e um semáforo binário (que gerencia um recurso que só pode ser usado por uma coisa) são quase idênticos. Sua distinção é que os bloqueios giratórios gerenciam o código a ser executado, enquanto os semáforos binários gerenciam algum tipo de recurso singular (por exemplo, tempo da CPU, exibição da saída)

Um semáforo comum, no entanto, é capaz de gerenciar vários threads acessando um recurso que pode ser dividido entre vários, mas é limitado (por exemplo, memória, largura de banda da rede)

Em resumo, é provável que um bloqueio de rotação continue perguntando ao semáforo se ele pode usar um recurso. (Imagine uma criança tendo que ir ao banheiro e esperando que outra pessoa termine.)

Fontes: Introdução à programação de sistemas, sistemas operacionais e wikipedia

1
valbaca