2017-05-13 3 views
0

Ich benutze eine dritte Seite Bibliothek in C geschrieben. Es ist als Singleton ausgeführt und enthält viele statische Funktionen, Variablen und Benutzeroberfläche. Ich muss es mit mehreren Instanzen ausführen können, damit sie sich nicht gegenseitig stören. Zum Beispiel, wenn ein Threads setzt statische VariableZugriff auf statische Funktionen/Variable aus verschiedenen Threads

static int index = 0; 
index = 10; 

der zweite Thread sieht noch index = 0. Ich bin nicht sicher, ob es überhaupt möglich ist, zu implementieren.

+0

Sie könnten alle statischen Variablen zu thread-lokalen Variablen vielleicht –

+0

ändern Es ist fast unmöglich mit 1000 Dateien Mutexes Schlösser usw. – sergman

+0

Sie müssen jeden Thread (entsprechend einer Instanz der Bibliothek) in seine eigene setzen Prozess, um diese Arbeit zu machen. –

Antwort

0

Was Sie fragen, ist nicht möglich.

Nehmen wir aus pädagogischen Gründen an, dass Sie sich auf einer Unix-Maschine befinden.

Jeder Prozess (wie die ausführbare ./a.out) die folgende Speicherlayout:

  1. Text
  2. Daten
    • Initialized
    • Uninitialized
  3. Heap
  4. Stapel

Wenn Sie einen Thread erstellen, dann teilt es all diesen Speichersegmente außer der Stapel Abschnitt (im Grunde jeder Thread einen neuen Stapelzeiger wird).

Darüber hinaus sind die statischen Variablen im Data Segment (in Ihrem Fall initialisiertes Datensegment) gespeichert, das ein Shared-Memory-Segment ist. Wenn ein Thread es ändert, ändert sich dies auch für alle anderen Threads.

Also nur Themen, die folgenden Dinge lokal für themself

  • Stapel

    Zeiger haben
  • Program Counter

  • Register

memory layout for multithreaded processes

Bildquelle: llnl.gov

Ich hoffe, es hat geholfen :-).

Verwandte Themen