Ja, im Prinzip schon.
Dabei muss man zwei Dinge beachten. Einmal müssen die Daten natürlich sichtbar sein. Globale Variablen sind ja bei größeren Programmen eher verpöhnt. Man kann aber z.B. sowas machen
Code:
class Dings
{
// irgendwelche gemeinsamen Daten, die auch noch andere verwenden
};
class Worker
{
// ...
explicit Worker(Dings ding) // ob man hier kopiert oder mit Referenz oder (Smart-)Pointer arbeitet hängt von der Anwendung ab
// Das explicit sagt: Ein Worker kriegt ein Ding. Ein Ding ist aber kein Worker.
// Gegenbeispiel: Bruchzahl(int i) Ein int ist auch eine Bruchzahl
// (Das ist nur bei Konstruktoren mit einem Parameter relevant)
// ...
int main()
// ...
Dings zeug; // Wird auch noch von anderen benutzt
Worker worker(zeug);
std::thread t(std::ref(worker)); // std::thread legt eine Kopie seiner Parameter an,
// das std::ref packt worker in einen reference_wrapper
// dadurch arbeitet der Thread auf dem selben Objekt wie main
Dann ist da noch das Problem, dass mehrere Prozessorkerne auf die selben Daten lesend oder schreibend zugreifen wollen.
Bei bool oder int ist das kein Problem
https://de.wikipedia.org/wiki/Cache-Koh%C3%A4renz
Schon bei einem string würde es knallen. Deshalb auch diese Funktion zur Consolenausgabe mit dem lock_guard.
Das alles zu erklären, würde etwas lang werden. Hier mal was es zu threads im Standard gibt
http://en.cppreference.com/w/cpp/thread
außerdem gibt es noch atomare Werte, die nur am Stück geändert werden können
http://en.cppreference.com/w/cpp/atomic
Lesezeichen