D'accord et est-ce que la SFML intègre des mutex qui permettent de faire un model multiple-reader/single writer ?
Voici un code avec les mutex normal pour ce genre de problème, mais ça semble vraiment bordélique...
thread_lecture1
{
mutex_écriture.lock(); //Si on écrit, alors on attend
mutex_écriture.unlock(); //Écriture fini, on peut lire
mutex_lecture1.lock(); //Lecture1 en cours... on lock le mutex
//Plein de code...
mutex_lecture1.unlock(); //Lecture terminée, on débloque le mutex de lecture1
}
thread_lecture2
{
mutex_écriture.lock(); //Si on écrit, alors on attend
mutex_écriture.unlock(); //Écriture fini, on peut lire
mutex_lecture2.lock(); //Lecture2 en cours... on lock le mutex
//Plein de code...
mutex_lecture2.unlock(); //Lecture terminée, on débloque le mutex de lecture1
}
thread_écriture
{
mutex_écriture.lock(); //On veut écrire, on lock le mutex d'écriture
mutex_lecture1.lock(); //On s'assure que lecture1 n'est pas en cours
mutex_lecture1.unlock(); //On le débloque, car le but n'est pas de le bloquer
mutex_lecture2.lock(); //On s'assure que lecture2 n'est pas en cours
mutex_lecture2.unlock(); //On le débloque, car le but n'est pas de le bloquer
//Plein de code...
mutex_écriture.unlock(); //Écriture terminée, on débloque le mutex de d'écriture
}
Sans compter qu'il va falloir mettre tout ça à jour si un jour j'ajoute un nouveau lecteur...
Quelle serait la meilleure solution sans sortir du cadre de la SFML ? On m'a présenté par exemple boost::shared_mutex, mais je ne suis vraiment pas intéressé à utiliser une autre bibliothèque que la SFML dans ce projet.
Merci et bonne journée