Sobes.tech
Junior — Middle

Qual é a diferença entre usar NSLock e Semaphore na gestão de threads?

sobes.tech IA

Resposta da IA

NSLock e Semaphore são mecanismos de sincronização no iOS para gerir o acesso a recursos em ambientes multithread, mas têm características diferentes:

  • NSLock é um simples bloqueio mútuo exclusivo (mutex). Permite que um thread adquira o bloqueio, enquanto outros aguardam até que seja libertado.

  • Semaphore (contador) é um mecanismo mais geral que permite limitar o número de threads que acedem simultaneamente a um recurso. Por exemplo, um semáforo com contador 1 funciona como um mutex, mas pode-se definir um contador maior que 1 para permitir acesso paralelo a um número limitado de threads.

Principais diferenças:

  • NSLock é adequado para proteger secções críticas quando é necessário acesso exclusivo.
  • Semaphore é útil quando se deseja limitar o número de operações simultâneas (por exemplo, um grupo de threads ou limitar ligações simultâneas).

Exemplo de uso de NSLock:

let lock = NSLock()

lock.lock()
// secção crítica
lock.unlock()

Exemplo de uso de Semaphore:

let semaphore = DispatchSemaphore(value: 3) // permitimos 3 acessos simultâneos

semaphore.wait()
// trabalho com o recurso
semaphore.signal()

Assim, a escolha depende da tarefa: acesso exclusivo — NSLock, quantidade limitada de acessos simultâneos — Semaphore.