2010-11-05 10 views
1

En utilisant System V Message Queue, qui ne possède pas de fonction "réception temporisée", comme POSIX MQ. Mais maintenant j'en ai besoin (cette fonction de réception temporisée).Système V Message Queue - Réception minutée

On peut demander: "alors pourquoi ne pas utiliser POSIX au lieu de Sys V?". Parce que dans mes benchmarks, SysV MQ était + - 20% plus rapide que POSIX MQ.

Maintenant la question. Comment simuler une "réception temporisée" pour Sys V MQ?

J'ai écrit un morceau de code qui le fait tester msgrcv avec IPC_NOWAIT dans une boucle avec usleep. Je pense que c'est moche, donc j'ai besoin d'idées pour écrire un beau =]

Répondre

0

Vous pourriez faire un petit code qui fait que le premier fork est un processus fils qui dort pendant X quantité de temps. Après le réveil, il envoie un signal (comme SIGUSR1) au père, qui interrompt le père et annule le msgrcv. Ensuite, le processus enfant meurt. Mais vous devez vous rappeler que vous devez spécifier un gestionnaire pour ce signal, car celui par défaut quitte juste le processus.

0

Cet article montre la même chose que vous avez remarqué, que vous devez faire une boucle sur elle: http://linuxgazette.net/issue92/hawk.html

Ensuite, il est de proposer une modification du noyau pour contourner ce problème. YMMV, mais je suppose que vous ne serez pas en mesure de pirater votre noyau juste pour le faire. :)

Questions connexes