IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

Concurrence et portabilité.


Sujet :

Threads & Processus C++

  1. #1
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut Concurrence et portabilité.
    Bonjour à tous.

    Je n'avais pas fait de gros projet C++ depuis un bout de temps et je me trouve un peu largué. Il se trouve que j'ai besoin de développer une petite biblio pour iOS, Android, Windows, Mac et Linux. Celle-ci sera consommée par divers front-ends écrits dans d'autres langages.

    J'ai d'abord besoin pour les plateformes mentionnées de threads, mutexes et condition variables. J'ai évidemment pensé aux pthreads mais il semble que pour Windows il faille déjà passer par une implémentation tierce-partie (si j'ai bien saisi, Windows XP n'inclue pas d'implémentation standard des pthreads) et je me demande si j'aurai plus de succès sur les autres plateformes. A défaut, boost supporte t-il les plateformes mentionnées ? Je n'ai pas pu trouver de réponse claire. Dernière alternative, trouve t-on déjà des implémentation des nouvelles biblios standard (c++ 11) pour ces plateformes ou a t-on une idée de leurs dates d'arrivées ? Enfin, quid des performances : avec la solution que vous me recommanderez, suis-je par exemple assuré dans tous les cas qu'un mutex s'appuiera bien sur les primitives du système et sera pas implémenté comme un spin lock sur certaines ?

    Dernière question relative aux instructions atomiques (incrémentation, décrémentation, compare-and-swap 32 et 64 bits) sur d'autres processeurs que x86 : existent-elles aujourd'hui sur tous les processeurs grand publics (et notamment architectures ARM) ou pas ? Si oui existe t-il des intrinsèques communs et bien supportés (je pense à gcc mais je suis ouvert à toute proposition) ?

    Merci d'avance pour toute l'aide que vous pourrez m'apporter afin d'éclaircir mes idées bien embrouillées.


    EDIT: Dans le même genre, si vous avez une recommandation côté réseaux (téléchargement asynchrone d'un fichier via ftp ou http) pour ces mêmes plateformes, je suis preneur.

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Serbie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Points : 55
    Points
    55
    Par défaut
    http://pocoproject.org, je l'ai testé avec Windows/Linux/FreeBSD et ca marche bien, je sais pas pour Android et iOS. La documentation (http://pocoproject.org/features.html) dits que iOS, Mac OS et Android sont supportés aussi.

  3. #3
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Merci pour la suggestion. J'avais déjà entendu parler de POCO sans jamais aller y voir de plus près et j'ai été assez séduit par le fait de voir (enfin) une information claire : liste des plateformes supportées, doc introductive concise et efficace, code clair, etc. L'idée d'utiliser tout un framework quand je n'en ai que peu le besoin me chagrine un peu mais il se peut que je me laisse séduire par celui-ci.

  4. #4
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    A défaut, boost supporte t-il les plateformes mentionnées ?
    A ce que je sache, il y a des adaptations de boost pour Android et IPhone (voir sur github je crois).

    Sinon oui les autres plateformes sont supportées.

  5. #5
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Merci pour la suggestion. J'ai été faire un petit tour et, malheureusement, je n'ai trouvé que des initiatives individuelles sans grande documentation ni support. Qui plus est, je suis tombé sur quelques billets de blogs et posts de forums révélant des erreurs de compilation sur iPhone ou Android pour certaines parties du code. Difficile d'en conclure s'il ne s'agit que de quelques heures de travail en perspective à serpenter entre les macros ou si le problème est plus profond.

  6. #6
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    De toutes façons il n'y a pas (à ma connaissance) de version officielle pour ces deux plateformes, donc je te suggère de voir ce qui a l'air le plus stable et de tester avec un une appli très simple.

    Il me semble que les problemes dépendent de la bibliothèque utilisée, donc peut etre que boost.thread sait de quoi il parle.


    Sinon l'alternative ça sera just::thread qui est l'implémentation de celui qui a proposé la lib de threading du standard, mais je ne sais pas si elle marche avec IOS et Android. Peut être en demandant sur le forum?

    Je vais voir si yen a qui ont des suggestions sur stackoverflow.


    edit> Là : http://stackoverflow.com/questions/9...ndroid-and-ios

  7. #7
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Merci pour la réponse, Klaim. Après avoir jeté un coup d'oeil à toutes ces solutions et leurs sources codes, et fouillé le web, il apparaît qu'en fait, à l'exception de Windows, toutes les plateformes supportent nativement POSIX et les pthreads (ce qui inclue les primitives de synchronisation), avec une seule restriction mineure (pas de pthread_cancel sur Android). Du coup, je vais simplement opter pour une approche 100% pthread en ayant recours à l'implémentation tierce de Redhat pour Windows sous LGPL, histoire de minimiser les dépendances, même si POCO sera sans doute utilisé pour le réseau ou le système de fichiers.

    Quant à l'autre besoin mentionné, les opérations atomiques, aujourd'hui seuls certains processeurs RISC exotiques n'offrent pas ces instructions. Autrement dit : toutes les plateformes que je vise ont ces opérations. Et un compilateur comme gcc offre des intrinsèques multi-plateformes (et msvc++ pour les processeurs x86 & co).

    Encore merci à vous tous.

  8. #8
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    Si pthread supporte ces plates-formes, alors il est quasiment certain que boost / Poco les supportent aussi, parce qu'en interne, elles l'utilisent très probablement.

  9. #9
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par Ekleog Voir le message
    Si pthread supporte ces plates-formes, alors il est quasiment certain que boost / Poco les supportent aussi, parce qu'en interne, elles l'utilisent très probablement.
    Oui, Boost s'appuie aussi sur les pthreads + implé spécifique Win32. Mais comme le framework dans son intégralité pose problème sur Android + iOS et que je ne peux pas en extraire de petits bouts sans charcuter les sources au risque d'introduire des bugs... Ce n'était pas la bonne solution ici.

Discussions similaires

  1. Environnement graphique et portabilité
    Par viddak dans le forum Linux
    Réponses: 3
    Dernier message: 11/06/2003, 13h57
  2. portabilité d'une interface
    Par marou dans le forum JBuilder
    Réponses: 4
    Dernier message: 21/03/2003, 08h53
  3. Réponses: 11
    Dernier message: 17/03/2003, 10h56
  4. portabilité et BDD
    Par delire8 dans le forum C++Builder
    Réponses: 7
    Dernier message: 04/07/2002, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo