Ich habe eine große Anzahl von Strukturen, etwa diese:
typedef struct
{
int a;
int b;
int c;
etc...
}
data_type;
data_type data[100000];
Ich habe eine Reihe von separaten Threads, von denen jeder Änderungen an Elementen innerhalb von data[] vornehmen möchte. Ich muss sicherstellen, dass nicht zwei Threads gleichzeitig versuchen, auf dasselbe Datenelement zuzugreifen. Um genau zu sein: ein Thread, der data[475].a = 3; und ein anderer Thread, der data[475].b = 7; zur gleichen Zeit ausführt, ist nicht erlaubt, aber ein Thread, der data[475].a = 3; ausführt, während ein anderer Thread data[476].a = 7; ausführt, ist erlaubt. Das Programm ist sehr Geschwindigkeit kritisch. Mein Plan ist es, für jedes Datenelement einen separaten kritischen Abschnitt zu erstellen, etwa so:
typedef struct
{
CRITICAL_SECTION critsec;
int a;
int b;
int c;
etc...
}
data_type;
Auf eine Art und Weise ich denke, es sollte alles funktionieren und ich sollte keine wirklichen Fragen haben, aber nicht mit viel Erfahrung in Multithread-Programmierung habe ich nur ein wenig unruhig über so viele kritische Abschnitte fühlen. Ich frage mich, ob die schiere Anzahl von ihnen eine Art von Ineffizienz verursachen könnte. Ich frage mich auch, ob vielleicht eine andere Multithreading-Technik schneller sein könnte? Sollte ich mich einfach entspannen und mit Plan A weitermachen?