2012-08-04 10 views
6

Parece una contradicción porque un semáforo debe bloquearse para funcionar.¿Qué es un semáforo que no bloquea?

Las búsquedas en Internet no muestran nada útil para definir lo que esto significa.

+0

¿Quizás se están refiriendo a algo así como un spinlock que depende del código de uso para bloquear o cambiar explícitamente a otra tarea? ¿Dónde encontraste el término? –

Respuesta

7

Si un semáforo tiene el valor 0, una operación de bajada se bloqueará hasta que alguien libere un recurso e incremente el semáforo.

Un semáforo sin bloqueo no bloquea en una operación de bajada si el recurso no está disponible, sino que produce un error. Esto puede ser útil si el programa necesita ese recurso de inmediato o sin suspender la ejecución, y si el recurso no está disponible, la lógica del programa puede hacer otra cosa.

5

Un semáforo sin bloqueo normalmente se refiere a un semáforo que le permite tratar de adquirir sin bloquear. Si el semáforo no se puede "bloquear", se bloqueará pero no se bloqueará. Si se puede bloquear, lo bloqueará y devolverá verdadero (que bloqueó).

1

Por ejemplo, la operación de espera asociada WaitForSingleObject() permite especificar un valor de tiempo de espera dwMilliseconds. Si este parámetro se establece en 0, el resultado de la llamada siempre regresará inmediatamente. De esta forma, el estado de un semáforo puede probarse sin bloqueo.

Cuestiones relacionadas