Pregunta

Quiero saber si intento bits fijados en el interior de un char / número entero de múltiples hilos, Voy a perder cualquier modificación? Voy a tener todos los ceros al principio y los hilos sólo se configurará en 1. La arquitectura del sistema es x64.

Gracias, Gokul.

¿Fue útil?

Solución

En x64 (x86) operaciones sobre enteros son atómicos. Esto significa que lee y escribe son independientemente atómica, no en combinación. (Por ejemplo, si usted tiene dos hilos escribir un int, al mismo tiempo, no verá la mitad del uno y la mitad de la otra -. Siempre verá una int completo o la otra)

Sin embargo, la lectura y la escritura son dos operaciones separadas. Puede realizar algunas operaciones de interbloqueo (haciendo que la lectura y escritura a ser una operación atómica), pero yo no creo que la lógica bit a bit cae en el conjunto de operaciones que se pueden realizar de esta manera.

Creo que tendrá que fijar en alguna mutex / monitor y realizar la lectura / escritura si desea que esta operación sea atómica.

Otros consejos

Debe utilizar un mutex o mecanismo de sincronización similares, o una operación atómica. En el primer caso, hay bibliotecas POSIX y Windows fácilmente disponibles y muy estándar. Para este último, la mayoría de los compiladores proporcionarán algunas funciones (por ejemplo http://gcc.gnu.org/wiki/Atomic ), línea de montaje u otro modo de manera conveniente para los utilizan, y siempre se puede recurrir a la vinculación a un objeto compilado a partir de lenguaje ensamblador.

definitivamente no puede evitar dicha sincronización explícita. Incluso si XOR digamos de alguna manera operado directamente y de forma atómica en el valor de sus núcleos de CPU más íntimos de memoria caché (que no), lo necesario para asegurar que el valor está sincronizado con cachés de otros núcleos de la CPU. Sólo aquellas instrucciones de la CPU que cachés explícita de sincronización son útiles para usted - es más fácil de usar a través de una de las opciones de la biblioteca mencionados anteriormente

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top