Compartir vía


SpinLock

La estructura SpinLock es un primitivo de sincronización de exclusión mutua y de bajo nivel que itera mientras espera a que se adquiera un bloqueo. En los equipos con varios núcleos, cuando se prevea que los tiempos de espera van ser breves y si la contención es mínima, SpinLock puede funcionar mejor que otros tipos de bloqueos. Sin embargo, se recomienda usar SpinLock solo cuando determine mediante la generación de perfiles que el método System.Threading.Monitor o los métodos Interlocked reducen significativamente el rendimiento del programa.

SpinLock puede generar el intervalo de tiempo del subproceso incluso si aún no ha adquirido el bloqueo. Esto se hace para evitar la inversión de prioridades del subproceso y para permitir que el recolector de elementos no utilizados progrese. Cuando se usa SpinLock, asegúrese de que ningún subproceso mantenga el bloqueo durante más de un intervalo de tiempo muy breve y que ningún subproceso puede bloquearse mientras mantiene el bloqueo.

Como SpinLock es un tipo de valor, explícitamente debe pasarlo por referencia si pretende que las dos copias hagan referencia al mismo bloqueo.

Para obtener más información acerca de cómo utilizar este tipo, vea System.Threading.SpinLock. Para consultar un ejemplo, vea Utilizar SpinLock para la sincronización de bajo nivel.

SpinLock admite un modo thread-tracking que puede usar durante la fase de desarrollo para ayudar a realizar un seguimiento del subproceso que está reteniendo el bloqueo en un momento determinado. El modo de seguimiento de subprocesos es muy útil para la depuración, pero se recomienda apagarlo en la versión de lanzamiento del programa porque puede ralentizar el rendimiento. Para más información, vea Habilitar el modo de seguimiento de subproceso en el bloqueo SpinLock.

Vea también