Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 |
while(!var) shed_yield(); |
Zitat von »"xardias"«
Das einzige was mir zu deinem Problem einfallen würde ist: Hast du den Mutex auch initialisiert? Sonst sollte es eigentlich keine Probleme machen den in 3 Threads zu benutzen.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
// Thread 1 class T1 { public: T1 () : _continue (false), _c (&m) // zu jeder Condition gehört ein Mutex { } void setContinueFlag () { _m.lock (); // Zugriff sichern. _continue = true; // Status ändern. _c.signal (); // ggf. einen Schläfer aufwecken (sonst broadcast für alle) _m.unlock (); // Zugriff freigeben } private: void run () { _m.lock (); // Zugriff absichern while (! _continue) // Variable prüfen und ggf. schlafen legen _c.wait (); // Wenn nicht gesetzt, schlafen legen (implizites unlock/lock bei schlafen/aufwachen). _m.unlock (); // Zugriff fertig. // mach was und fertig. } bool _continue; Mutex _m; Condition _c; }; // Thread 2 class T2 { public: T2 (T1* other) : _other (other) { } private: void run () { // mach was _other->setContinueFlag (); // Jetzt kann _other loslegen. } T1* _other; }; |
Werbeanzeige