estático DEFINE_SPINLOCK(synctime_lock);

Esta es una declaración que define un spinlock (bloqueo de giro) en el kernel de Linux. DEFINE_SPINLOCKEs una macro en el kernel que se utiliza para definir e inicializar un spinlock. Su parámetro es el nombre del spinlock que desea definir. Aquí synctime_lockestá el nombre del spinlock que definiste. Spinlock es un mecanismo de bloqueo simple. Cuando un hilo intenta adquirir un spinlock que ya está ocupado, esperará (es decir, girará, comprobando constantemente el estado del bloqueo en un bucle en lugar de entrar en suspensión) hasta que el spinlock esté disponible. Este mecanismo de bloqueo es útil en estructuras de datos direccionadas por procesador y código sensible al tiempo, como en rutinas de servicio de interrupción de hardware.

La palabra clave aquí staticsignifica que este spinlock solo es visible en el archivo en el que está definido. DEFINE_SPINLOCKEl bloqueo ya está inicializado, por lo que puede usarlo inmediatamente sin necesidad de inicialización adicional en su código. Sin embargo, cabe señalar que el tiempo de espera del spinlock debe mantenerse lo más corto posible y que las operaciones que puedan provocar el cambio de tareas o el modo de suspensión no deben realizarse durante el período de espera.

Spinlock es un bloqueo de bajo nivel, su característica es que cuando el hilo no puede obtener el bloqueo de inmediato, seguirá esperando allí, o "girando", hasta que se libere el bloqueo. La ventaja de este mecanismo es que reduce la sobrecarga causada por el bloqueo y la activación de subprocesos, y es muy eficaz en situaciones en las que el tiempo de adquisición del bloqueo es corto. Sin embargo, si el bloqueo se mantiene durante mucho tiempo, el bloqueo de giro puede ocupar una gran cantidad de recursos de la CPU, lo que provoca que el rendimiento del sistema se degrade. Al mismo tiempo, cuando se usa spinlock, si un hilo que sostiene el bloqueo entra en suspensión o se produce un cambio de tarea, otros hilos que esperan el bloqueo solo pueden girar y esperar, porque no conocen el hilo que sostiene el bloqueo. ¿Activar y liberar el bloqueo? Esto puede provocar una pérdida innecesaria de tiempo de CPU y, si la prioridad del subproceso reemplazado es mayor, puede provocar una inversión de prioridad.

Por lo tanto, el bloqueo de giro debe mantenerse lo más corto posible y las operaciones que puedan provocar el cambio de tareas o la suspensión no deben realizarse durante el período de espera para minimizar el tiempo que los subprocesos que esperan el bloqueo de giro desperdician recursos de CPU.

Supongo que te gusta

Origin blog.csdn.net/qq_41483419/article/details/132906489
Recomendado
Clasificación