Ich habe einige C-Quellcode, der Funktionen aufruft, die globale Werte ändern. Ich möchte in der Lage sein, mehrere, etwas unabhängige Instanzen des Hauptcodes auszuführen, ohne die globalen Variablen zu teilen, die an die aufgerufenen Funktionen angehängt sind. Der Hauptcode befindet sich in einer separaten Quelldatei als die Funktionsdefinitionen und die globalen Variablen, so dass die Hauptfunktion keinen direkten Zugriff auf die globalen Variablen hat. Gibt es eine Möglichkeit, mehrere Instanzen des Hauptcodes zu haben, der Funktionen mit eigenen Kopien globaler Variablen aufruft?Ausführen von C-Funktion in separaten Threads mit lokalen globalen Variablen
Ich habe Threads untersucht, aber die globalen Variablen werden zwischen den Threads geteilt. Ich habe auch zwei separate Prozesse ausgeführt und verwende nur Interprozesskommunikation, um zwischen den verschiedenen Instanzen zu kommunizieren, aber das scheint zu viel Arbeit für das zu sein, was ich tun möchte.
Die optimale Lösung wäre separate Threads, die jeweils eine eigene Kopie der globalen Variablen, die die Funktionen verwenden, haben.
Ich habe mich nur gefragt, ob jemand anderes ein ähnliches Problem durch eine einfachere Route gelöst hat.
EDIT: Die Funktionen mit Globals, die ich anrufe, sind nicht mein Code, so dass ich die Globals oder die Funktionen, die sie aufrufen, nicht genau ändern kann.
Beispiel-Code, um das Problem zu klären:
// In func.c
int g_A = 0;
void func()
{
g_A++;
}
// In main.cpp
void Thread()
{
while (true)
{
func();
}
}
int main()
{
// Could be threads, just looking for something that will allow
// me to run the "Thread" function in multiple parallel instances
// without sharing the global variables attached to the function
// that it calls
std::thread foo1(func);
std::thread foo2(func);
foo1.join();
return 0;
}
Child-Prozesse Klänge wie das, was Sie brauchen - entweder das oder Ihren Code so umgestalten, dass (die Variablen, die für jeden Thread anders sein müssen) nicht mehr global sind. –
können Sie einen Beispielcode bereitstellen? –
Refactoring war nicht wirklich eine Option, da die Funktionen nicht mein Code sind, aber ich werde in untergeordnete Prozesse schauen. – JubileeTheBear