thread semaphores lock multithreading ipc mutex semaphore spinlock

multithreading - lock - semaphores in os



Diferencia entre Mutex, Semaphore y Spin Locks (2)

Aquí hay una gran explicación de la diferencia entre semáforos y mutex:

http://blog.feabhas.com/2009/09/mutex-vs-semaphores- –-part-1-semaphores /

La respuesta corta tiene que ver con la propiedad, al menos con semáforos binarios, pero le sugiero que lea el artículo completo.

Estoy haciendo experimentos con IPC, especialmente con Mutex, Semaphore y Spin Lock. Lo que aprendí es que Mutex se usa para el bloqueo asíncrono (con el dormir (según las teorías que leí en NET)) Mecanismo, el semáforo es un mecanismo de bloqueo síncrono (con señalización y el dormir), y Spin Lock es un mecanismo síncrono pero sin dormir

¿Alguien puede ayudarme a aclarar estas cosas profundamente? Y otra duda es sobre Mutex, cuando escribí un programa con subproceso y mutex, mientras que un subproceso está ejecutando, otro subproceso no está en estado de suspensión, pero intenta continuamente obtener el bloqueo. ¿Así que Mutex está durmiendo o no durmiendo?


Primero, recuerda el objetivo de estos ''objetos sincronizados'' :

Estos objetos fueron diseñados para proporcionar un uso eficiente y coherente de ''datos compartidos'' entre más de 1 hilo entre 1 proceso o de diferentes procesos.

Estos objetos pueden ser ''adquiridos'' o ''liberados'' .

¡¡¡Eso es!!! ¡¡¡Fin de la historia!!!

Ahora, si te ayuda, déjame poner mi grano de arena:

1) Sección crítica = Objeto de usuario utilizado para permitir la ejecución de solo un subproceso activo de muchos otros dentro de un proceso . Los otros subprocesos no seleccionados (@ que adquieren este objeto) se ponen en suspensión .

[Sin capacidad de interproceso, objeto muy primitivo].

2) Mutex Semaphore (también conocido como Mutex) = objeto Kernel utilizado para permitir la ejecución de un solo subproceso activo de muchos otros, dentro de un proceso o entre diferentes procesos . Los otros subprocesos no seleccionados (@ que adquieren este objeto) se ponen en suspensión . Este objeto admite la propiedad de subprocesos, la notificación de terminación de subprocesos, la recursión (múltiples llamadas de ''adquisición'' desde el mismo subproceso) y ''evitación de inversión de prioridad''.

[Capacidad de proceso, muy segura de usar, una especie de objeto de sincronización de ''alto nivel''].

3) Semáforo de recuento (también conocido como semáforo) = objeto Kernel utilizado para permitir la ejecución de un grupo de subprocesos activos de muchos otros, dentro de un proceso o entre diferentes procesos . Los otros subprocesos no seleccionados (@ que adquieren este objeto) se ponen en suspensión .

[Sin embargo, la capacidad de proceso no es muy segura de usar porque carece de los siguientes atributos ''mutex'': notificación de terminación de subproceso, recursión, ''evitación de inversión de prioridad'', etc.].

4) Y ahora, hablando de ''spinlocks'', primero algunas definiciones:

Región crítica = Una región de memoria compartida por 2 o más procesos.

Bloqueo = Una variable cuyo valor permite o niega la entrada a una "región crítica". (Podría ser implementado como una simple ''bandera booleana'').

Espera ocupada = prueba continua de una variable hasta que aparezca algún valor.

Finalmente:

Spin-lock (también conocido como Spinlock) = un bloqueo que usa la espera ocupada . (La adquisición del bloqueo se realiza mediante xchg o operaciones atómicas similares).

[Sin hilo durmiendo, se usa principalmente en el nivel del núcleo solamente. Ineficaz para el código de nivel de usuario].

Como último comentario, no estoy seguro, pero puedo apostar algunos grandes dólares a que los primeros 3 objetos de sincronización anteriores (# 1, # 2 y # 3) hagan uso de esta simple bestia (# 4) como parte de su implementación.

¡Tenga un buen día!.

Referencias:

Conceptos de tiempo real para sistemas integrados de Qing Li con Caroline Yao (libros CMP).

-Modern Operating Systems (3rd) por Andrew Tanenbaum (Pearson Education International).

-Programación de aplicaciones para Microsoft Windows (4) por Jeffrey Richter (Microsoft Programming Series).