URL: https://linuxfr.org/forums/programmation-c--2/posts/fourberies-de-libpthread Title: Fourberies de libpthread... Authors: JaguarWan Date: 2005年03月19日T01:34:49+01:00 Tags: Score: 0 Bonsoir à tous, J'ai quelques soucis de portabilité avec la libpthread, et j'aurais besoin de votre expérience pour déterminer ce qui ne va pas dans mon utilisation de cette bibliothèque. Mon petit serveur écoute grace à un thread dédié, qui boucle sur accept et enregistre les sockets récupérés dans un tableau. Quand je quitte mon application, accept() étant bloquant, je suis dans l'obligation de faire un pthread_cancel() sur ce thread (et pour etre propre, un pthread_join() juste derrière). Normalement, accept() est un point de cancelation valide puisqu'il bloque. Mais si sous Linux tout se passe comme prévu, les implémentation Mac OS X et Windows ne tuent pas le thread... Comme un autre thread similaire utilisant fgets() refusait de mourir sous Windows, j'en ai déduit que la cancelation des fonctions bloquantes ne devait pas etre tout à fait portable. Qu'à cela ne tienne, j'ai passé mon socket d'écoute en non bloquant sur ces deux systèmes et ajouté des pthread_testcancel(). Là, sous Mac OS X et Windows le thread est bien tué, mais sous Windows le pthread_join() freeze l'application ! Vu les différences de comportement, je pense que je fais quelque chose de Mal®, ou que quelque chose m'a échappé... Je vous serais vraiment très reconnaissant si vous pouviez me dire ce qui ne va pas dans mon code :)

AltStyle によって変換されたページ (->オリジナル) /