2011-09-08 10 views
5

Como el mutex en la mayoría de los sistemas se implementan usando CAS ops, me preguntaba acerca de la comparación de rendimiento de estas dos construcciones.try-lock llamada mutex vs llamadas CAS

¿Es justo decir que si se implementa un mutex usando CAS, entonces la llamada try-lock en ese mutex tendrá el mismo rendimiento/similar en comparación con las operaciones CAS?

CAS, al ser altamente dependiente del sistema, estaba pensando si podría ser reemplazado sumariamente por la derivación más conocida/estandarizada, mutex try-lock.

Respuesta

4

Su razonamiento es sólido; en cualquier implementación sensata, el costo de una operación "trylock" será aproximadamente el mismo que un CAS. Sin embargo, CAS en general no puede ser reemplazado por trylock; trylock es una primitiva más débil que no puede manipular datos arbitrarios.

2

No es justo decir algo sobre el rendimiento relativo de CAS frente a un bloqueo. Diferentes sistemas operativos implementan bloqueos de formas muy diferentes. Win32 necesita un cambio de contexto en el kernel que es lento, Linux tiene mutexes de espacio de usuario. El rendimiento también variará mucho en función de la sección crítica. También debe considerar lo que está haciendo en la sección crítica, ¿está incrementando un número entero o realizando una operación compleja? Entonces, hay muchas variables que entran en el rendimiento relativo y no se pueden hacer declaraciones amplias al respecto.

Yo recomendaría usar su lenguaje/plataformas más fácil de usar la abstracción de bloqueo. Mida el rendimiento y vea si es aceptable para usted.

+0

Win32 tiene mutexes de espacio de usuario ('CriticalSection's), es solo un problema de terminología. –

Cuestiones relacionadas