En una máquina de cuatro núcleos, estoy considerando la paralelización del algoritmo C#/.NET que implica tener múltiples hilos que lean la pequeña matriz int [] al mismo tiempo. Hasta ahora, parece estar funcionando bastante bien, pero no estoy seguro de dónde se especifica que las lecturas concurrentes en una matriz son seguras para subprocesos en .NET. ¿Alguna sugerencia?Acceso de lectura concurrente en una matriz int []: ¿es seguro? ¿Es rápido?
Entonces, ¿me pregunto si este enfoque es realmente eficiente? ¿Hay situaciones en las que es mejor que realmente dupliques los datos de entrada para cada hilo, de modo que no haya ninguna lectura concurrente, y cada arreglo (¿quizás?) Tenga la oportunidad de almacenarse en caché cerca de la CPU de afinidad?
¿Alguna idea sobre las mejores prácticas con respecto a las CPU multinúcleo?
Estoy totalmente de acuerdo con usted en que los datos inmutables son seguros para subprocesos. A veces, sin embargo, es difícil determinar si los datos no cambiarán. Por ejemplo, una operación de lectura aparente (o digamos 'método de consulta') en un objeto puede causar una escritura interna. Siempre tienes que estar atento a eso. Sin embargo, con arreglos: la lectura de la matriz definitivamente no la cambiará. – Steven
@Steven acepta que no siempre se puede decir si algo es inmutable. Pero creo que tu ejemplo es simplemente un mal diseño. Creo que los datos inmutables (especialmente cuando se comparten) deben diseñarse explícitamente como tales. –
@Marthinho: No tienes idea de cuánto diseño malo presencié en mi operador :-) Me convertí en un desarrollador compulsivo y sospechoso. No confío en nadie, ni siquiera en mí mismo :-) Sin embargo, estoy de acuerdo con todo lo que has dicho aquí. – Steven