Quelles opérations courantes sont sûres en multithread ?

Quelles opérations courantes sont sûres en multithread ? - C++ - Programmation

Marsh Posté le 19-08-2010 à 14:54:02    

J'ai une question assez simple, j'accepte avec joie les liens google en guise de réponse : Quelles opérations élémentaires sont sûres dans le cadre d'un programme à plusieurs fils d'exécution ?

 

Par exemple, si j'ai un objet utilisé dans mes deux fils d'exécution, j'effectue une lecture/écriture d'un membre dans chacun des deux, est-ce nécessaire de verrouiller cette opération élémentaire ?

 

idem si je fais simplement un incrément d'une variable, ou peut-être d'autres opérations que je n'ai pas en tête ?


Message édité par hephaestos le 19-08-2010 à 15:03:27
Reply

Marsh Posté le 19-08-2010 à 14:54:02   

Reply

Marsh Posté le 19-08-2010 à 14:59:31    

Aucune.  Il faut synchroniser explicitement ou bien passer par des types/operations speciales.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 19-08-2010 à 15:03:07    

[:xqwzts]  
 
C'est quoi que t'appelles synchroniser explicitement et types/opérations spéciales ?

Reply

Marsh Posté le 19-08-2010 à 15:09:53    

Si deux operations peuvent agir sur le meme emplacement memoire, soit tu synchronises pour ne pas les faire en meme temps, soit tu utilises des types (genre les atomic<> de C++0X) ou des operations (genre primitives InterlockedInc).


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 26-08-2010 à 00:28:52    

Parmi les liens intéressants, il y a ceux de Herb Sutter qui se fait l'avocat du message passing (messages asynchrones, où au lieu de bloquer les threads sur de la mémoire partagée (synchronisation), on fait de l'envoi de messages entre threads qui les traitent un à un sans bloquer, ou seulement quand ils sont en attente d'un résultat), et des queues pour le multithreading pour le partage d'objets. Ma petite expérience du multithreading en Java me dit que c'est aussi une, voire la bonne démarche, qui simplifie nettement l'analyse et réduit les risques de bugs, surtout quand le nombre de threads augmente, et pas mal de problèmes peuvent se modéliser avec ces paradigmes.
Perso, je les privilégie autant que faire se peut par rapport aux techniques de synchronisation explicite.

 

Les 3 articles ci-dessous sont assez illuminants:
http://www.drdobbs.com/high-perfor [...] /215900465
http://www.drdobbs.com/go-parallel [...] =226700179
http://www.drdobbs.com/go-parallel [...] =225700095
A noter que les bases de toutes ces techniques sont implémentées depuis longtemps en Java et probablement en C#, et ont montré leur efficacité depuis belle lurette.

 

Sinon, plein d'articles intéressants sur la prog multithread:
http://www.drdobbs.com/go-parallel [...] =224701827
http://herbsutter.com/2009/01/12/e [...] -volatile/


Message édité par el muchacho le 26-08-2010 à 01:06:13

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed