8
votes

Quel est le meilleur pour Windows? Pthreads ou Createmutex?

Je porte mon application à Windows de Linux. Je suis assez nouveau à la fine art de l'application de portage à travers les plates-formes. Pour autant que je sache, Windows ne soutient pas de manière native la mise en œuvre des threads POSIX. Est-ce vrai? J'ai entendu parler de la mise en œuvre de Pthreads pour Windows (un wrapper ou quelque chose), serait-il préférable de les utiliser ou d'utiliser Createmutex et d'autres API fournies par Windows ???? Quelqu'un pls. éclairer moi avec les avantages et les inconvénients des deux mondes. Certains conseils divers pour le portage iraient bien avec la réponse.

Merci d'avance.


0 commentaires

6 Réponses :


3
votes

Une chose que vous devez garder à l'esprit est ce qui est l'avenir de ce code. Prévoyez-vous de développer (et de libérer) sur les deux plates-formes à l'avenir? Ou est-ce un port aller simple?

La meilleure chose à faire lors du portage d'un projet consiste à conserver les modifications réelles au code aussi minime que possible. Dans votre cas, cela signifierait aller avec une solution Pthread. Cela étant dit, si vous envisagez que cela soit un port aller simple, vous ne faites jamais de mal. :)

Je prendrais un peu de temps pour examiner pleinement les deux stratifigmes, puis implémenter celui que vous vous sentez le plus à l'aise.


0 commentaires

7
votes

Tout va être la même chose (Pthreads va simplement appeler Entriticalsection, etc.), donc si vous avez un wrapper Pthreads, vous devez probablement l'utiliser afin que vous n'ayez pas à changer autant de code < / p>


0 commentaires

0
votes

Pourquoi ne pas avoir le meilleur des deux mondes et utiliser une bibliothèque qui enveloppe à la fois des API de Pthreads et de la fenêtre et utilise l'un sous les couvertures? Votre code reste le même sur les deux plates-formes.

Il n'y a pas de pénurie de telles libs en C ++, donc je ne peux pas imaginer qu'il n'y a pas de versions C sur.


1 commentaires

L'APR (Apache Portable Runtime) est une bibliothèque de la plateforme transversale fantastique qui fait cela. Fortement recommandé car il est bien testé et, euh, plutôt populaire.



0
votes

sur les applications Windows C / C ++ qui utilisent le CRT doivent appeler BEGINTHREAD / BEGINTHREEDEX Pour initialiser correctement le CRT dans le nouveau fil.


0 commentaires

1
votes

La première chose que je ferais est de porter pour augmenter le fil sous Linux qu'à Windows.


2 commentaires

En allant de l'avant, de booster les fils, que la base de thread de la bibliothèque standard suivante sera la solution recommandée pour faire de la filetage dans la plate-forme croisée C ++. L'API de filetage POSIX et la filetage RAW Win32 ne sont pas exactement facilement interchangeables. La variable de condition, par exemple, est disponible dans POSIX mais pas sur toutes les plates-formes Win32. Si vous souhaitez compter sur une bibliothèque, un wrapper POSIX / WIN32, par exemple, vous risquez de ne pas connaître la qualité de la bibliothèque et vous ne pourrez peut-être pas obtenir beaucoup d'aide. Boost d'autre part, vous êtes sûr de trouver beaucoup d'aide lorsque vous rencontrez des problèmes.


Merci. C'était une aide. Est-il disponible pour C?



5
votes

Ceci fonctionne bien: http://sourceware.org/pthreads-win32/

C'est un port de la bibliothèque Pthreads pour Windows.


1 commentaires

Je vais jeter mes 2 cents que nous avons eu une très bonne chance avec cette bibliothèque aussi. Une application assez complexe avec de nombreux sémaphores, files d'attente et Theads a été portée de Vxworks à Posix et enfin sur Windows avec ceci.