2009-10-29 3 views
4

quelqu'un peut-il me dire ce qui se passe si le programme multithread reçoit le signal SIGSTOP pendant l'exécution de mq_send?mq_send est-il atomique?

+0

donc, j'ai fait un test sur ma machine Linux (Linux home 2.6.31-11-générique # 38-Ubuntu SMP Fri Oct 2 11:06:40 UTC 2009 x86_64 GNU/Linux) et il semble être atomique , mais je ne suis pas sûr à 100%. Si quelqu'un connaît la réponse exacte ou sait comment fonctionne mq_send, il serait bon de partager des informations avec nous :) – iddqd

Répondre

2

La page de manuel pour mq_send indique qu'elle est implémentée au-dessus de mq_timedsend, qui est un appel système sous Linux. Les appels système sont généralement atomiques en ce qu'ils réussissent ou non. Si un appel système est interrompu par un signal, le comportement habituel est de retourner -1 et de définir errno à EINTR. Il semble que mq_send a ce comportement.

Fondamentalement, vous devriez vérifier EINTR, et réessayez l'appel si elle échoue de cette manière. Ceci est particulièrement important pour les appels système qui peuvent bloquer comme recv ou select, car ils ont plus de chance d'être interrompus.