Rendez-vous... avec des Mutex!
Je répond à ma propre question...
Dans la classe de Thread, un Mutex (accessible)...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
void Comportement::run()
{
Mutex1.lock();
Mutex2.lock();
for(;;)
{
... Taf de la phase 1 ....
emit TerminatedPhase1(numThread);
Mutex1.lock(); // Qui bloque le thread
... Taf de la phase 2 ...
emit TerminatedPhase2(numThread);
Mutex2.lock(); // Qui bloque le thread
}
} |
et comme code des deux slots...
Code:
1 2 3 4 5 6 7 8 9 10 11
|
void Pilote::MiseAJour1(int numThread)
{
Event1 |= 1<<numThread;
if(Event1 == (1<<mNbThread) -1)
{
Event1 = 0;
for(int i=0; i<mNbThread; i++)
mComportement[i]->Mutex1.unlock();
}
} |
Ca marche nickel. J'ai réglé le nombre de thread de calcul à QThread.idealThreadCount()-1 et j'arrive à 99% d'occupation du CPU (sur un 3770K) avec une accélération de 220% par rapport à un seule thread de calcul et 300% en monothread...
Je passe en résolu.