Hello,
J'ai une fonction qui, par des appels successifs, doit remplir un grand buffer (peu importe de quoi) par morceaux. Je crée donc un petit buffer et appelle la fonction dans une boucle en lui filant l'adresse du petit buffer. La fonction écrase le contenu, et une fois sorti de la fonction, je mets à jour le grand buffer en lui filant le petit buffer et un décalage d'indice idoine.
J'aimerais dorénavant qu'elle soit appelée en multithread (à l'aide de Boost). je remplace la boucle par un compteur partagé qui s'incrémente. Ce n'est pas trop gênant de bloquer ce compteur par un mutex. La MAJ est rapide (je recopie el compteur dans une variable locale). En revanche, je ne veux pas bloquer tous les threads dès que l'un d 'entre eux veut remplir son petit buffer. Je pense donc avoir autant de petits buffer que je lance de threads, donc avoir un "pool" de petits buffers.
Disons que j'ai un grand buffer d'une taille équivalente à 100 petits buffer. Je lance 4 threads pour exécuter la fonction de remplissage de buffer. Il faudrait donc un vecteur de 4 petits buckets. Dès qu'un thread rentre dans la fonction de MAJ, il en chope un, le bloque, le remplit, met à jour le grand buffer, et libère le petit buffer.
Y a-t-il une méthode pour faire ce genre de truc ?
Merci.
Partager