En el kernel de Linux, los mutexes son efectivamente semáforos con requisitos de uso más estrictos y un recuento igual a uno. Los semáforos están en desuso a favor de mutexes. Por lo tanto, solo podemos ocuparnos de mutexes y spinlocks.
Los mutexes imponen la exclusión mutua al poner a los contendientes en una lista de espera y dormir . El núcleo se apaga y ejecuta otro código. Cuando se libera el bloqueo, se despierta y programa un camarero en la cola de espera. Los mutexes son la forma en que la mayoría de los bloqueos funcionan fuera del núcleo. Es decir, los mutexes son su cerradura básica y cotidiana.
Los Spinlocks imponen la exclusión mutua girando en un circuito cerrado, verificando el estado del bloqueo . Cuando finalmente se libera el bloqueo, el spinlock adquiere el bloqueo en sí mismo y se libera del bucle. Utiliza spinlocks en lugar de mutexes en una de dos situaciones: código de rendimiento crítico (los spinlocks son mucho más livianos) que no mantendrán el bloqueo por mucho tiempo y cuando no puedes dormir, como en los controladores de interrupción.
- ¿Es posible hacer desarrollo web en C?
- ¿Qué tan relevante es CodeWars en el desarrollo web?
- ¿Cómo documentaría una aplicación web como Gmail?
- ¿Existe una plataforma de publicación de libros de código abierto?
- ¿Cuáles son los asuntos legales a tener en cuenta al crear una aplicación web (proteger mi idea, términos, condiciones, políticas, etc.)?
Una preocupación secundaria es que usaría (y solo puede usar) mutexes para sincronizar el espacio de usuario con el espacio de usuario o el kernel con el espacio de usuario, ya que solo los mutexes pueden dormir. Por el contrario, debido a que los spinlocks no duermen sino que están ocupados, solo tienen sentido sincronizar un contexto de kernel versus otro, en un procesador diferente. Por esta razón, existen mutexes incluso en núcleos uniprocesadores, mientras que los spinlocks están optimizados para no operar en compilaciones que no son SMP.