Seguridad del hilo en matrices C #

Tiene 2 hilos diferentes:

  • una lectura desde una matriz de C # (por ejemplo, desde la primera ubicación),
  • y otra escribiendo en la misma matriz de C # pero en una ubicación diferente (por ejemplo, en la última ubicación)

¿Es seguro el hilo o no?
(Y me refiero aquí sin bloquear la lectura ni escribir)

Este caso particular es seguro, sí.

Leer y escribir en diferentes partes de una matriz no interfiere con las otras operaciones.

Sin embargo, leer y escribir en la misma ubicación puede causarle problemas, según el tipo de elemento y el tamaño de los elementos.

No estoy seguro de que esto esté garantizado para ser seguro. Imagina que tienes un byte []. Esos bytes están empaquetados en la memoria. Ahora, si modifica esos bytes, el comstackdor puede unir algunas de las escrituras para realizar operaciones de escritura de lectura (32 bits) de tamaño modificado. En algunas CPU, por ejemplo, ARM, este es el único tipo de instrucción de modificación de memoria que tiene el comstackdor. Esto es especialmente útil si está modificando más de un byte a la vez. La CPU puede hacer lo mismo también. También puede reordenar cosas sin que usted lo sepa. Ante este tipo de optimización, es posible que un hilo que lee memoria adyacente vea modificaciones parciales. Normalmente no se ve este tipo de efecto porque el asignador de stack es bueno para ti y siempre te da memoria que al menos está alineada con la palabra.

Larga historia corta: sí. Siempre que se trate de dos ubicaciones diferentes, es una operación segura.

Hubo una discusión sobre esto hace un tiempo, tiene alguna información útil si tienes curiosidad.