¿Cuál es la relevancia práctica de los algoritmos de exclusión mutua de libros de texto?

8

Se ha investigado bastante sobre algoritmos de exclusión mutua; por ejemplo, gran parte se presenta en libros de texto clásicos como The Art of Multiprocessor Programming , donde se dedica un capítulo completo a ellos.

Me pregunto cuáles son las situaciones prácticas en las que uno podría necesitar estos algoritmos durante la ingeniería de un sistema concurrente, en lugar de usar primitivas de sincronización típicas proporcionadas por el lenguaje y el sistema operativo (por ejemplo, proporcionadas por la biblioteca pthread).

Puedo pensar en muchos casos especiales en los que me imagino que las primitivas estándar no están específicamente ajustadas para ellos, por ejemplo, "un lector frecuente y un escritor poco frecuente", o viceversa, o "exactamente una operación de escritura, muchos lectores", etc. - ¿Alguno de los algoritmos de exclusión mutua del libro de texto es significativamente mejor en la práctica en tales situaciones?

En pocas palabras: ¿qué algoritmos de exclusión mutua son de relevancia práctica para un ingeniero que ya tiene a su disposición una biblioteca típica de primitivas de concurrencia proporcionadas por el lenguaje?

jkff
fuente
Esta era un área activa de investigación hace décadas en la creación de estos "primitivos" y ha cambiado sustancialmente en la práctica de la ingeniería. también parte de esto fue un trabajo teórico sobre posibilidades que no necesariamente estaba destinado a ser aplicado de manera práctica. Algunas de las construcciones son algo artificiales y responden preguntas teóricas abiertas. son ejercicios útiles para comprender las muchas / sorprendentes sutilezas de concurrencia y construir una intuición en el área.
vzn

Respuestas:

6

Respuesta: ninguna. De eso no se tratan esas secciones de The Art of Multiprocessor Programming de Herlihy y Shavit. En los capítulos sobre exclusión mutua, Herlihy y Shavit no le ofrecen alternativas a la pthreadbiblioteca, le muestran cómo se implementa el equivalente de la pthreadbiblioteca.

El capítulo 2 de Herlihy y Shavit se titula "Exclusión mutua". Ofrece una variedad de algoritmos clásicos para implementar el equivalente pthread_mutex_lock()con solo memoria compartida secuencialmente consistente. Mis respuestas https://cs.stackexchange.com/a/12632/7459 y https://cs.stackexchange.com/a/30249/7459 discuten la importancia de estas implementaciones y tienen un puntero a uno que es práctico para usar en máquinas que no tienen operaciones de sincronización de hardware incorporadas. (Documento de Lamport de 1987 en ACM Trans. Sobre sistemas informáticos).

El Capítulo 7 de Herlihy y Shavit ofrece una variedad de implementaciones de bloqueo de giro y cola del equivalente de pthread_mutex_lock(), y el Capítulo 8 se expande para discutir pthread_cond_t(variables de condición), pthread_rwlock_t(bloqueos de lector / escritor), y toca brevemente semaphores. Puede haber situaciones en las que pthread_rwlock_tpodría usarse como una alternativa pthread_lock_tpor razones de rendimiento (pero generalmente no) y en Posix debe usar semaphorespara la sincronización entre procesos.

Los capítulos 9 a 16 tratan principalmente sobre aplicaciones (varios tipos de contenedores concurrentes). El capítulo 17 discute brevemente el equivalente de pthread_barrier_t.

Dicho todo esto, Herlihy y Shavit son dos de los defensores más vocales de la memoria transaccional y una variedad de tipos de sincronización sin bloqueo (y sin esperas). Estas técnicas están pensadas como alternativas a la exclusión mutua en ciertos casos. Herlihy y Shavit rocian varias implementaciones sin bloqueo en los capítulos 9 a 16, y luego entran en detalles sobre la memoria transaccional en el Capítulo 18.

La memoria transaccional y otras técnicas de sincronización sin bloqueo están destinadas a resolver el problema de que algunos algoritmos mal diseñados requieren subprocesos para mantener sus secciones críticas durante mucho tiempo. La memoria transaccional y la sincronización verdaderamente sin bloqueo no son actualmente alternativas prácticas en una situación real, pero las técnicas para transformar estructuras de datos de bloqueo en estructuras de datos sin bloqueo son útiles en la práctica para minimizar la cantidad de tiempo que una estructura de datos de bloqueo permanece en su estado crítico. sección. (A menudo puede reducir el tamaño de la sección crítica a solo un par de instrucciones de la máquina).

Lógica Errante
fuente