¿El semáforo satisface la espera acotada o son solo para proporcionar exclusión mutua?do semáforos satisface la espera limitada
Respuesta
respuesta
se puede romper delimitada condición de espera teóricamente como se verá a continuación. Prácticamente, depende en gran medida de qué algoritmo de programación se utiliza.
La aplicación clásica de wait()
signal()
y primitiva es como:
//primitive
wait(semaphore* S)
{
S->value--;
if (S->value < 0)
{
add this process to S->list;
block();
}
}
//primitive
signal(semaphore* S)
{
S->value++;
if (S->value <= 0)
{
remove a process P from S->list;
wakeup(P);
}
}
Cuando un proceso llama a la wait()
y falla el "si" de prueba, aparecerá carente en una lista de espera. Si se bloquean más de un proceso en el mismo semáforo, todos se ponen en esta lista (o de alguna manera se vinculan entre sí como se puede imaginar). Cuando otro proceso abandona la sección crítica y se llama a la señal(), se seleccionará un proceso en la lista de espera para que se active, listo para competir nuevamente por la CPU. Sin embargo, es el planificador quien decide qué proceso elegir de la lista de espera. Si la programación se implementa de una manera LIFO (último en entrar, primero en salir), por ejemplo, es posible que algunos procesos estén privados de comida.
Ejemplo
T1: thread 1 calls wait(), enters critical section
T2: thread 2 calls wait(), blocked in waiting list
T3: thread 3 calls wait(), blocked in waiting list
T4: thread 1 leaves critical section, calls signal()
T5: scheduler wakes up thread 3
T6: thread 3 enters critical section
T7: thread 4 calls wait(), blocked in waiting list
T8: thread 3 leaves critical section, calls signal()
T9: scheduler wakes up thread 4
..
Como se puede ver, aunque se implementa/utiliza el semáforo correctamente, el hilo 2 tiene un tiempo de espera sin límites, incluso, posiblemente, el hambre, provocada mediante la introducción continua de nuevos procesos.
- 1. ¿Los semáforos de Java usan espera ocupada o espera/notificación por defecto?
- 2. ¿El algoritmo de Peterson satisface la inanición?
- 3. semáforos POSIX en Mac OS X: sem_timedwait alternativa
- 4. exclusión mutua y semáforos
- 5. ¿Cuándo debería usar semáforos?
- 6. Semáforos y programación simultánea
- 7. Diferencia entre variables de finalización y semáforos
- 8. ¿Cómo implementar la comunicación de subprocesos de semáforos en Perl?
- 9. ¿Semáforos con nombre en Python?
- 10. Xcode: parámetro inválido que no satisface
- 11. AtomicInteger para generación de secuencia limitada
- 12. Verificando cualquier elemento de una matriz satisface una condición
- 13. vim memoria de línea limitada
- 14. semáforos, la sección crítica, mutex Ejemplos de MFC y C#
- 15. Eliminar toda la memoria compartida y los semáforos en Linux
- 16. SpinWait vs espera en espera. ¿Cuál usar?
- 17. Qué significa la página web .do
- 18. Cómo escribir sin la notación do
- 19. ¿Qué significa la instrucción "(void) startGuardBegin;" do?
- 20. banda limitada generación de forma de onda
- 21. Elipse limitante limitada a ejes horizontales/verticales
- 22. Regresión limitada de L1 en C
- 23. java limitada definición de tipo genérico
- 24. El do-while
- 25. DBIx :: Class do unions?
- 26. ¿Qué significa auto && do?
- 27. ¿pyGame do 3d?
- 28. php Publicación limitada a 1000 variables
- 29. Comprobar si un `object [] args` satisface una instancia Delegate?
- 30. ¿Qué significa FormsAuthentication.SetAuthCookie do