Pregunta

Me pregunto si podría leer o escribir valor int compartida y sin bloqueo en la CPU MIPS (especialmente Amazonas o del Danubio). Lo que quiero decir es que si una lectura o escritura tales son atómicos (otro hilo no puede interrumpir los mismos). Para que quede claro -. No quiero para prevenir la carrera entre hilos, pero me importa si mismo valor int no está dañado

Si se asume que el compilador se alinea todos los enteros en los límites de la palabra de la CPU, debería ser posible. Yo uso gcc (g ++). Las pruebas también muestran que parece que funcione correctamente. Pero tal vez alguien lo sabe a ciencia cierta?

¿Fue útil?

Solución

Utilice operaciones atómicas incorporadas de GCC y obtendrá advertencias si no están soportados: http://gcc.gnu.org/onlinedocs/ gcc-4.1.2 / gcc / Atómica-Builtins.html

Parece que las combinaciones de suma / resta y pruebas (al menos) son posibles en el hardware: http://rswiki.csie.org/lxr/ http / fuente / include / asm-MIPS / atomic.h

Otros consejos

Depende de la operación. Después de haber mirado suficientes programas desmontadas en MIPS, sé que sólo algunas operaciones son atómicos.

asignación de un nuevo valor podría ser 1 op o más, usted tiene que mirar el conjunto.

por ejemplo:

x = 0; // move $a0, $0


x = 0x50000; // lui $a0, 0x0005


x = 0x50234; // lui $a0, 0x0005
             // ori $a0, 0x0234

MIPS assembley o aquí

aquí a ver danubio y amazonas son MIPS32, que cubre mi ejemplo, y por lo tanto no todos entero de 32 bits inmediata se puede escribir de forma atómica.

R10000 en la publicación anterior es MIPS64. Desde un valor de 32 bits sería la mitad del tamaño del registro, podría ser una carga atómica / escritura.

¿Qué operaciones? Es plausible que int a; a=42; es atómica. No hay ninguna garantía de que a= a+42; es atómica, o en cualesquiera variantes como con ++. Además, usted tiene que estar preocupado por lo que el optimizador puede hacer, por ejemplo mediante la celebración de un valor intermedio en un registro cuando sea conveniente.

La pregunta invita respuestas engañosas.

Puede única autoridad responde "¿Es atómicas" preguntas sobre el lenguaje ensamblador / máquina.

Cualquier dado C / C ++ fragmento de código no ofrece ninguna garantía, puede variar dependiendo de exactamente qué compilador (y versión) que utiliza, etc (a menos que llame alguna lo que sea intrínseca o específica de la plataforma que está garantizado para compilar a un atómica conocida instrucción de máquina.)

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