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 :

multithreading sous mac os leopard


Sujet :

Threads & Processus C++

  1. #1
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2009
    Messages
    219
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 219
    Par d�faut multithreading sous mac os leopard
    Bonjours � tousse

    Depuis quelque jour, j'essaye d'optimiser mon jeux video et je m'interaisse de tr�s tr�s pr�s au multithreading. Seulement, j'ai tout les probl�mes du monde avec les semaphores. En effet, parce que je suis sous mac, <semaphore.h> ne fonctionne pas. C'est alors que je me lance � 100% pour trouver une solution.

    Au bous de quelques recherches google, je r�ussi � voir que <pthread.h> g�re les s�maphores en voyant ce pdf : http://www.lita.univ-metz.fr/~paris/...s/SemMutex.pdf
    Alors, heureux, je change vite mon code avec les fonctions list� en premi�re page qui g�re les s�maphores . Mais lors de la compilation ... Fausse joie : les fonctions ne sont pas d�clar� dans cette librarie contrairement ce qu'enseigne le pdf trouver sur internet.


    Ma question est : Comment puis je avoir un syst�me de s�maphore stable pour mac OS X ?

    Je vous remercie de votre lecture, ainsi que de votre aide �ventuel �tant la bienvenue.

  2. #2
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2009
    Messages
    219
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 219
    Par d�faut
    Suite � de nombreuse heures de recherche, je suis enfin tomb� sur une documentation relativement satisfaisante.

    En effet, les s�maphores sous mac OS sont utilis�s avec
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    #include <pthread.h>
    #include <mach/semaphore.h>
    #include <mach/task.h>
    De cela, j'en ai cr�er quelque macros pour les comptabilit�s linux

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #include <pthread.h>
     
    #ifdef __APPLE__
    	#include <mach/semaphore.h>
    	#include <mach/task.h>
     
    	#define semaphoreCreate(Semaphore, Number) semaphore_create (mach_task_self (), &(Semaphore), SYNC_POLICY_FIFO, (Number))
    	#define semaphoreWait(Semaphore) semaphore_wait ((Semaphore))
    	#define semaphoreSet(Semaphore) semaphore_signal ((Semaphore))
    	#define semaphoreDestroy(Semaphore) semaphore_destroy (mach_task_self (), (Semaphore))
     
    	#define semaphore_struct semaphore_t
    #else
    	#include <semaphore.h>
     
    	#define semaphoreCreate(Semaphore, Number) sem_init (&(Semaphore), 0, (Number))
    	#define semaphoreWait(Semaphore) sem_wait (&(Semaphore))
    	#define semaphoreSet(Semaphore) sem_post (&(Semaphore))
    	#define semaphoreDestroy(Semaphore) sem_destroy (&(Semaphore))
     
    	#define semaphore_struct sem_t
    #endif
    vous souhaitez instancier une semaphore ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    semaphore_struct MySemaphore ;
    vous souhaitez initialiser une semaphore ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    semaphoreCreate (MySemaphore, TiketsLength) ;
    // TiketsLength étant le nombre de set/post que vous souhaité initialisé
    vous souhaitez poster dans une semaphore ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    semaphoreSet (MySemaphore) ;
    ou bien attendre une semaphore ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    semaphoreWait (MySemaphore) ;
    et enfin : detruire une s�maphore ...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    semaphoreDestroy (MySemaphore) ;
    Peut �tre serai il bon de mettre ce post dans la faqs ... Ce qui serai, je pense, tr�s utiles � bien d'autre personnes que moi.

  3. #3
    Expert confirm�

    Homme Profil pro
    Ing�nieur syst�mes et r�seaux
    Inscrit en
    F�vrier 2007
    Messages
    4 253
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Ing�nieur syst�mes et r�seaux
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par d�faut
    Ou bien utiliser boost::condition_variable ?

    Puis je demande la raison d'utilisation d'un semaphore ?
    C'est super rare d'en avoir besoin !

  4. #4
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2009
    Messages
    219
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 219
    Par d�faut
    bonjours nicroman

    Et bien, je n'utilise pas boost , mais n�amoin, je peut te cit� quelque exemple personnel de l'utilisation des s�maphores ... pour ma part, je d�veloppe un jeux vid�o.

    J'utilise les s�maphores, pour effectuer du multithreading sur une fonction de height map.

    (Height map, est un proc�d� de mod�lisation de terrain 3D en fonction du gris d'une image ex : le blanc d'une image sera une montagne, le noire sera une plaine voir, le font d'un oc�an)

    Ma height map qui est charg�, est divis�e en r�gions (comme des cartes routi�res), mon thread fils va faire des calculs de normales, de coordonn� de textures et autres pour chaque r�gions, et � chaque foit qu'une r�gion � �t� termin� par le thread fils, le thread p�re peut compil� une display liste OpengGL pendant que le fils s'attaque � la r�gion suivante. Autant de thread fils ex�cutant la m�me fonction que de coeurs, mais sur une r�gion diff�rente de la carte en cours de chargement.

    un autre exemple avec un systeme de buffer circulaire, est sur le chargement de texture pour opengl... en faite, pendant qu'un thread "attend" les acc�s disques pour charger un image dans la RAM, un autre transfert l'image pr�c�demment charger de la RAM � la VRAM par OpenGL.

    Les temps de chargement sont divis� presque par 2 !!!! (celons ma config, � savoir un ordinateur portable 2.5 Ghz, Bus � 1 Ghz, DD 5400trs/min, Nvidia 9600M GT)

Discussions similaires

  1. Multithreading sous mac
    Par Dubphonic dans le forum Threads & Processus
    R�ponses: 2
    Dernier message: 03/04/2011, 09h26
  2. [iOS 3.x] Possible d'installer l'iPhone SDK 3.2 sous Mac OS X Leopard ?
    Par fermy dans le forum XCode
    R�ponses: 2
    Dernier message: 21/05/2010, 16h53
  3. [Java] Java 1.6 sous mac os x leopard
    Par FERDIKAM dans le forum Apple
    R�ponses: 2
    Dernier message: 19/04/2010, 20h41
  4. Comment installer Mysql sous mac os x Leopard
    Par nycdark dans le forum Installation
    R�ponses: 1
    Dernier message: 19/02/2010, 12h46
  5. Leonardi sous Mac Leopard
    Par kaporal13 dans le forum W4 Express
    R�ponses: 2
    Dernier message: 11/05/2009, 15h35

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