Na maszynie czterordzeniowej rozważam równoległość algorytmu C#/.NET, który polega na jednoczesnym odczytywaniu wielu wątków z małej tablicy int []. Do tej pory wydaje się działać dość dobrze, ale nie jestem pewien, gdzie jest określone, że jednoczesne odczyty na tablicy są bezpieczne dla wątków w .NET. Jakieś wskazówki?Równoczesny dostęp do odczytu w tablicy int []: Czy jest bezpieczny? Czy to szybko?
Następnie zastanawiam się również, czy to podejście jest naprawdę skuteczne? Czy są sytuacje, w których lepiej jest duplikować dane wejściowe dla każdego wątku, tak aby nie było żadnych jednoczesnych odczytów, a każda tablica (może?) Otrzymuje możliwość buforowania w pobliżu procesora koligacji?
Jakieś przemyślenia na temat najlepszych praktyk w odniesieniu do procesorów wielordzeniowych?
Całkowicie się z tobą zgadzam, że niezmienne dane są bezpieczne dla wątków. Czasami jednak trudno jest określić, czy dane się nie zmienią. Na przykład pozorna operacja odczytu (lub powiedzmy "metoda zapytania") na obiekcie może spowodować wewnętrzne zapisanie. Zawsze musisz być na poszukiwania. Jednak z tablicami: odczytywanie tablicy z pewnością tego nie zmieni. – Steven
@Steven zgadzają się, że nie zawsze można stwierdzić, czy coś jest niezmienne. Ale myślę, że twój przykład to po prostu zły projekt. Uważam, że niezmienne dane (zwłaszcza gdy są udostępniane) powinny być wyraźnie zaprojektowane jako takie. –
@Marthinho: Nie masz pojęcia, jaki zły projekt byłam świadkiem w mojej karierze :-) To mnie kompulsywny, podejrzany programista. Nie ufam nikomu, nawet sobie :-) Niemniej zgadzam się ze wszystkim, co tu powiedziałeś. – Steven