2009-07-21 18 views
7

He encontrado el artículo siguiente: Use GCC-provided atomic lock operations to replace pthread_mutex_lock functionsGCC Atomic Builtins en lugar de pthread?

Se refiere a GCC Atomic Builtins.

Lo que sugiere el artículo es utilizar las interfaces atómicas GCC en lugar de las herramientas de sincronización pthread.

¿Es esta una buena idea?

PS. La publicación de mysql es obviamente engañosa. Atomic Builtins no puede reemplazar todas las herramientas pthread. Por ejemplo, el bloqueo requiere que, si no se puede adquirir un bloqueo, un hilo tiene que esperar. En otras palabras, le pide al sistema operativo que espere, de modo que la espera sea pasiva. Simple GCC incorporado no puede hacer eso.

Respuesta

5

¿Es esta una buena idea?

No si alguna vez tiene la intención de compilar el código con algo que no sea gcc. ¿Los pthreads le causan problemas específicos?

+0

No hay problemas con pthreads, solo me preguntaba si sería gratificante cambiar a esos builtins de GCC. Siempre compilaré usando GCC, no hay posibilidades de cambiar esto. –

+1

"Si no está roto, no lo arregles" es mi lema. –

+0

Intel construyó estas construcciones internas, como menciona la página; Yo esperaría que también trabajen en otros compiladores. – CesarB

1

No. Las incorporaciones de GCC probablemente tengan sentido para los tipos que escriben sistemas operativos, libc y tal vez pthreads, pero para su aplicación promedio no hay ninguna razón para no usar el enfoque pthreads.

E incluso si siempre usa GCC, algún día querrá ejecutar una herramienta de análisis estático que no manejará todas las extensiones GCC del cliente.

2

Si ya está utilizando pthread, y las funciones pthread lock ya hacen lo que desea, es mejor utilizar las funciones pthread lock.

Estas construcciones atómicas son solo los bloques de construcción para las primitivas de mayor nivel; escribir estos primitivos de nivel superior tiende a ser complicado, y cualquier error puede causar errores que pueden tardar mucho tiempo en aparecer (ya que generalmente dependen del tiempo). Si ya tiene una biblioteca con primitivas de nivel superior que hacen lo que desea y son lo suficientemente rápidas para sus necesidades (y no asume que son demasiado lentas simplemente porque tiene que hacer una llamada a una función), es mejor no reinventar la rueda.

0

las construcciones atómicas tienen sentido si quiere mejorar el rendimiento. Los builtins le permiten minimizar la contención causada por la serialización de mutexes. Cuando usa mutexes y crea una sesión crítica, serializa el acceso a esa sección de su código; en el código de rendimiento, es posible que desee intentar evitar la contención mediante el uso de datos específicos de subprocesos y cuando no sea posible el uso de átomos. El último caso se está bloqueando y, al bloquearlo, minimiza el tiempo durante el cual se mantiene el bloqueo (utilizando mensajes y un bloqueo verificado, aunque algunos afirman que no funciona, me funciona).