Synchronisation de Threads avec un systeme de signal/event
Bonjour,
Desole pour le nom du topic mais je ne sais pas trop comment appeller ce que je veux faire :p
Bref, je suis en train de me prendre la tete sur un soucis de synchro inter threads.
Ce que je veux faire me semble pourtant assez simple mais je n'arrive pas a trouver une solution fiable a 100%. Je fais donc appelle a vous en esperant que vous puissiez m'eclairer :)
Je suis en train de coder un server Multi Thread. Pour faire simple il y a deux threads :
Le premier s'occupe du network (le network).
Le second du traitement des donnees (le core).
Ce que je veux pouvoir faire :
Le thread de traitement de donnee doit pouvoir attendre une instruction. Quand le network push une instruction dans le queue du core. Le network doit reveiller le core. Jusqu'ici rien de bien complique avec des conditions !
Cependant je voudrais pouvoir empiler les actions du network.
Comme si dessous :
Code:
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
|
class GThreadTest
{
private:
Tools::Thread<GThreadTest> _thread1;
Tools::Thread<GThreadTest> _thread2;
Tools::Signal _signal;
double _compteur;
public:
void thread1()
{
this->_signal.active();
this->_signal.active();
this->_signal.active();
this->_signal.active();
std::cout << "Signaux OK" << std::endl;
}
void thread2()
{
Sleep(1000);
this->_signal.wait();
this->_signal.wait();
this->_signal.wait();
this->_signal.wait();
}
GThreadTest()
: _thread1(), _thread2()
{
this->_thread1.start(this, >hreadTest::thread1);
this->_thread2.start(this, >hreadTest::thread2);
this->_thread1.join();
this->_thread2.join();
};
}; |
On active 4 fois le signal.
Le second thread doit alors passer les 4 wait avec succes.
Le code doit etre portable linux/windows le namespace "Tools" contient mes abstractions.
Avez vous une idee d'algorithme avec des mutex et des conds pour arriver a ce resultat ?
Merci d'avance :)
Bonne soiree