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

Normalisation C++ Discussion :

Une proposition pour std::process ?


Sujet :

Normalisation C++

  1. #1
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut Une proposition pour std::process ?
    Je ne sais pas ou en est le commit� sur la gestion des processus, et j'ai du mal � trouver les documents qui correspondent au travail du workshop concurrence.

    Quoi qu'il en soit, je pensais faire une proposition, mais plut�t que de l'adresser au commit� sans pr�paration, je voulais auparavant passer par vous - parce que vous �tes un communaut� de gens vachement dou�s

    Le texte de la proposition n'est pas finalis�, donc ce post pr�liminaire va servir � pr�senter une impl�mentation possible sous linux d'une classe std::process - et du namespace std::this_process. Ceux qui voient une ressemblance avec la classe std::thread voient juste : la classe std::process a exactement la m�me interface, � un poil pr�s (il n'y a pas de m�thode hardware_concurrency(), puisque �a n'a pas de sens). La classe process::id n'est pas compl�te pour l'instant (il manque de nombreux op�rateurs).

    Le code se compile simplement : make va construire l'ex�cutable ptest. Le code de ptest est le suivant :

    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
     
    #include <thread>
    #include <iostream>
    #include <cstdlib>
    #include <process>
     
    int main()
    {
    	std::process p([=]() {
    		std::cout << "- this process    : " << std::this_process::get_id() << std::endl;
    		std::exit(EXIT_SUCCESS);
    	});
    	std::cout << "+ this process    : " << std::this_process::get_id() << std::endl;
    	std::cout << "+ before join()   : " << p.get_id() << std::endl;
    	p.join();
    	std::cout << "+ after join()    : " << p.get_id() << std::endl;
    	std::cout << "+ this process    : " << std::this_process::get_id() << std::endl;
    }
    Il faudrait l'�tendre pour pr�senter les autres fonctionnalit�s de la classe et du namespace correspondant (notamment this_process::exec()). Je vais faire �a dans la journ�e (ou dans la soir�e).

    L'impl�mentation sous Windows viendra lorsque j'aurais le temps (allez, on va dire : assez rapidement quand m�me ; le point ennuyeux �tant le fork(), mais je sais comment passer outre, donc �a ira).

    Je joint l'impl�mentation sous la forme d'un tar.bz2, mais vous pouvez trouver une version plus � jours � l'adresse suivante : https://code.google.com/p/edt-process-cpp1y/

    git clone https://code.google.com/p/edt-process-cpp1y/

    Vous permettra de r�cup�rer le repository, dans lequel se trouvera rapidement un document lyx.
    Fichiers attach�s Fichiers attach�s
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    L'id�e est int�ressante... mais �a demande beaucoup de boulot je pense

    J'ai rien trouv� dans les drafts (http://www.open-std.org/JTC1/SC22/WG21/docs/papers/) et dans le std-proposals forum (j'ai survol� rapidement)
    Tu as regard� http://isocpp.org/std/submit-a-proposal pour le processus de soumission ?
    Il faut aussi regarder ce qui existe d�j� comme boost.process.
    Et j'imagine qu'il est difficile de s�parer les process des mod�les de m�moire et des interprocess ?

  3. #3
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par gbdivers Voir le message
    L'id�e est int�ressante... mais �a demande beaucoup de boulot je pense

    J'ai rien trouv� dans les drafts (http://www.open-std.org/JTC1/SC22/WG21/docs/papers/) et dans le std-proposals forum (j'ai survol� rapidement)
    Tu as regard� http://isocpp.org/std/submit-a-proposal pour le processus de soumission ?
    Il faut aussi regarder ce qui existe d�j� comme boost.process.
    Et j'imagine qu'il est difficile de s�parer les process des mod�les de m�moire et des interprocess ?
    Etonamment, pour ce qui est du mod�le de m�moire, on a pas trop de d�pendances. En fait, vu le mod�le de m�moire de C++11, on devrait �tre OK (je n'ai pas trouv� de cas qui soit ennuyeux vis � vis de �a).

    Par contre, effectivement, je vais devoir me taper pas mal d'interprocess :

    • signaux - si tant est qu'on puisse les impl�menter sur toutes les plateformes. Windows ne supporte qu'un petit nombre de signaux (du genre SIGINT, SIGSEGV...)
    • shared memory - l�, on est quand m�me assez tranquille.
    • pipes - autant au niveau syst�me, �a parait simple (la fonction pipe() en C est quand m�me relativement simple), autant en C++ �a me parait tordu : comment je fais pour piper std::cout avec std::cin de mon processus fils ? Pourquoi devrais-je passer par des file descriptors alors que c'est une quantit� � peine connue de la librairie standard (sauf via l'encapsulation d'une partie de la lib C standard).
    • s�maphores interprocess, message queue interprocess : l� aussi, �a va �tre bien chaud comme il faut. Il faut respecter les programmes C existants : si j'ai un programme C++ qui ouvre un s�maphore, celui-ci doit pouvoir �tre ouvert avec un programme C existant.


    Oui, il y a beaucoup de boulot, sans compter qu'il y a certaines quantit�s dont je ne suis pas s�r.

    J'ai mis � jour google code avec le document au format lyx, je joint le PDF.

    Edit

    Sans oublier, effectivement, que les mutex et autres primitives de synchronisation peuvent �tre partag�s par plusieurs processus sur certains OS.

    L�, �a va commencer � �tre compliqu�

    (C'est donc autant un appel � la discussion qu'un appel � l'aide).

    Citation Envoy� par gbdivers Voir le message
    Tu as regard� http://isocpp.org/std/submit-a-proposal pour le processus de soumission ?
    Je n'en suis pas encore l�

    Citation Envoy� par gbdivers Voir le message
    Il faut aussi regarder ce qui existe d�j� comme boost.process.
    Pas encore pr�sent dans boost 1.53.0 ou c'est moi qui ne sait pas chercher ?
    Images attach�es Images attach�es
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Par d�faut
    Un r�sum� de quelques papers : http://www.meetingcpp.com/index.php/...rs-part-1.html

    Il y a notamment : N3534 c++ pipelines

  5. #5
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par victor_gasgas Voir le message
    Un r�sum� de quelques papers : http://www.meetingcpp.com/index.php/...rs-part-1.html

    Il y a notamment : N3534 c++ pipelines
    Ces pipelines l� sont grosso modo �quivalent � une discussion plus ancienne qui se trouve ici : http://www.developpez.net/forums/d10...ine-generique/. Il s'agit de proposer une construction s�mantiquement �quivalente � un pipeline dans le sens math�matique que le terme peut avoir. La construction propos�e est une composition de fonctions via l'op�rateur | - ce qui fait ressembler le tout � une notation du shell. (Note: dans la solution que j'ai finalement impl�ment�, je suis pass� par une classe pipeline_stage<> pour faire la composition. Cf aussi ici : http://cpp.developpez.com/telecharge...ish-de-OpenSSL. A l'�poque, je l'avais mis en oeuvre pour composer une fonction de chiffrement ; ce qui me donne une autre id�e de proposition )

    L�, dans les points durs dont je parle plus haut, je parle de pipe au sens unix du terme (sous repr�sent�s sous Windows, mais ils existent quand m�me). Il s'agit de redirection des entr�es et sorties standard.

    Le probl�me est qu'en C++ correct, ces entr�es et sortie standard sont principalement utilisable via std::cin, std::cout (et autres objets aparent�s). Proposer une solution dans la librairie standard qui ne se base pas sur les iostream me semble �tre une mauvaise id�e. Mais si on va par l�, le probl�me doit pouvoir se g�n�raliser � tous les iostream, y compris ceux pour lesquels il n'y a pas de file descriptor sous-jacent - sans quoi on va all�grement violer le principe de moindre surprise.

    Avec le code que j'ai post�, je peux forker des programmes simplement :

    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
    24
     
    #include <process>
     
    void pipe_cout_to_cin_child()
    {
      // ?
    }
     
    void pipe_cout_to_cin_parent()
    {
      // ?
    }
     
    int main(int ac, char *av[])
    {
      pipe_cout_to_cin_parent();
      std::process p1([av]() {
        pipe_cout_to_cin_child(); 
        std::this_process::exec(av[1]);
      });
      std::process p2([av]() { 
        std::this_process::exec(av[2]); 
      });  
    }
    que dois-je �crire dans les fonction pipe_cout_to_cin_parent/child() ? Et comment devrais-je l'�crire pour que �a soit �l�gant et simple ? C'est la dure question que je me pose...
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  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
    Par d�faut
    std::process p([=]() {
    std::cout << "- this process : " << std::this_process::get_id() << std::endl;
    std::exit(EXIT_SUCCESS);
    });
    Est-ce que tu peux expliquer clairement ce que ce code est cense faire?
    Par exemple, moi je peu l'interpreter comme ca:
    1. indique au compilateur de generer un autre binaire qui sera compile avec le code du lambda et tout ce qu'il embarque - le tout a la compilation;
    2. indique au compilateur de lancer le meme binaire que celui compile mais avec une instruction speciale generee aleatoirement (anonyme) qui va executer une autre fonction que main(), soit la fonction representee par la lambda;
    3. generer a l'execution un binaire executable temporaire puis l'executer;

    Franchement je suis dubitatif.

    D'abord, qu'est-ce que tu fais si le lambda capture par reference? A ce que je sache tu ne peux pas l'interdire, si?

    Je comprends pas bien comment on peut ecrire le meme code pour obtenir deux processus sans lancer/forker le binaire en cours d'execution.

  7. #7
    Membre Expert
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par d�faut
    Citation Envoy� par Klaim Voir le message
    Est-ce que tu peux expliquer clairement ce que ce code est cense faire?
    Par exemple, moi je peu l'interpreter comme ca:
    1. indique au compilateur de generer un autre binaire qui sera compile avec le code du lambda et tout ce qu'il embarque - le tout a la compilation;
    2. indique au compilateur de lancer le meme binaire que celui compile mais avec une instruction speciale generee aleatoirement (anonyme) qui va executer une autre fonction que main(), soit la fonction representee par la lambda;
    3. generer a l'execution un binaire executable temporaire puis l'executer;
    Je pense qu'il faut le comprendre comme �a
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    if(!fork()) { //fils
       return lambda();
    }
    Il n'y a donc pas de 2eme binaire cr�er (cf 1er post).

    @Emmanuel Deloget, c'est une bonne proposition, apr�s les threads, que les process soient int�gr�s � la STL me semble logique.

    Un point me semble quand m�me manquant � ta proposition : il faudrait "diff�rencier" les fork et exec, c'est � dire pouvoir ex�cuter un autre ex�cutable sans devoir faire de fork avant (ou l'�quivalent Windows). Je connais mal Unix, mais sous Windows, niveau performance, il est bien plus rentable de lancer un nouveau process sur un autre exe directement que de passer par un "fork & exec".

    edit:
    Citation Envoy� par Klaim Voir le message
    D'abord, qu'est-ce que tu fais si le lambda capture par reference? A ce que je sache tu ne peux pas l'interdire, si?
    Dans ce cas l'utilisation de m�moire partag�e (ou autre syst�me de communication entre process) semble obligatoire.

  8. #8
    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
    Par d�faut
    Citation Envoy� par Iradrille Voir le message
    Je pense qu'il faut le comprendre comme �a
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    if(!fork()) { //fils
       return lambda();
    }
    Il n'y a donc pas de 2eme binaire cr�er (cf 1er post).
    C'est mon point 2. Mais dans ce cas ca manque d'un moyen de lancer un autre processus via un autre binaire executable.

    @Emmanuel Deloget, c'est une bonne proposition, apr�s les threads, que les process soient int�gr�s � la STL me semble logique.

    Un point me semble quand m�me manquant � ta proposition : il faudrait "diff�rencier" les fork et exec, c'est � dire pouvoir ex�cuter un autre ex�cutable sans devoir faire de fork avant (ou l'�quivalent Windows). Je connais mal Unix, mais sous Windows, niveau performance, il est bien plus rentable de lancer un nouveau process sur un autre exe directement que de passer par un "fork & exec".
    Je n'ai jamais develope avec les fonctions specifiques aux unix ce qui peut expliquer que je trouve ce proposal tarabiscote, mais il me semblait qu'il n'y avait pas d'equivalent a fork() dans windows?

    editans ce cas l'utilisation de m�moire partag�e (ou autre syst�me de communication entre process) semble obligatoire.
    Donc la declaration de cette lambda modifierai comment les elements references sont definis en memoire? C'est une recette pour la confusion de l'utilisateur non?

  9. #9
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par Klaim Voir le message
    Est-ce que tu peux expliquer clairement ce que ce code est cense faire?
    Par exemple, moi je peu l'interpreter comme ca:
    1. indique au compilateur de generer un autre binaire qui sera compile avec le code du lambda et tout ce qu'il embarque - le tout a la compilation;
    2. indique au compilateur de lancer le meme binaire que celui compile mais avec une instruction speciale generee aleatoirement (anonyme) qui va executer une autre fonction que main(), soit la fonction representee par la lambda;
    3. generer a l'execution un binaire executable temporaire puis l'executer;

    Franchement je suis dubitatif.

    D'abord, qu'est-ce que tu fais si le lambda capture par reference? A ce que je sache tu ne peux pas l'interdire, si?

    Je comprends pas bien comment on peut ecrire le meme code pour obtenir deux processus sans lancer/forker le binaire en cours d'execution.
    Ah !

    Tu aurais lu le code sur google code, tu aurais vu que je fais un fork()

    Le constructeur de std::process se comporte globalement comme le constructeur de std::thread - sauf qu'au lieu de cr�er un processus l�ger, il cr�e un thread (sous Linux, on utilise le m�me appel syst�me clone(2)).

    Citation Envoy� par Iradrille Voir le message
    Je pense qu'il faut le comprendre comme �a
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    if(!fork()) { //fils
       return lambda();
    }
    Il n'y a donc pas de 2eme binaire cr�er (cf 1er post).
    Exactement.

    Citation Envoy� par Iradrille Voir le message
    @Emmanuel Deloget, c'est une bonne proposition, apr�s les threads, que les process soient int�gr�s � la STL me semble logique.

    Un point me semble quand m�me manquant � ta proposition : il faudrait "diff�rencier" les fork et exec, c'est � dire pouvoir ex�cuter un autre ex�cutable sans devoir faire de fork avant (ou l'�quivalent Windows). Je connais mal Unix, mais sous Windows, niveau performance, il est bien plus rentable de lancer un nouveau process sur un autre exe directement que de passer par un "fork & exec".
    Il est possible d'utiliser std::this_process::exec() sans utiliser la classe process - this_process est un namespace, pas une classe.

    Citation Envoy� par Iradrille Voir le message
    editans ce cas l'utilisation de m�moire partag�e (ou autre syst�me de communication entre process) semble obligatoire.
    Non, pas n�cessairement. Les IPC sont de toute fa�on pr�vus dans le proposal, je r�fl�chi encore � leur forme. Je veux y int�grer :

    * pipe
    * shm
    * mutex nomm�s
    * s�maphores nomm�s (il faudra peut-�tre un autre proposal pour les s�maphores normaux)
    * queue de message

    Ces diff�rents syst�me posent pas mal de probl�me, donc je suis preneur pour toute id�e ou toute formalisation.

    Citation Envoy� par Klaim Voir le message
    C'est mon point 2. Mais dans ce cas ca manque d'un moyen de lancer un autre processus via un autre binaire executable.
    std::this_process::exec(), dans la proposition.

    Citation Envoy� par Klaim Voir le message
    Je n'ai jamais develope avec les fonctions specifiques aux unix ce qui peut expliquer que je trouve ce proposal tarabiscote, mais il me semblait qu'il n'y avait pas d'equivalent a fork() dans windows?
    En fait, si, mais il fait partie de l'API bas niveau : ZwCreateProcess(). Il faut par contre se taper toute l'initialisation de la MMU, etc. CreateProcess() utilise cette fonction.

    Une impl�mentation de fork() est tout � fait possible. MS l'a fait pour son produit Interix (layer POSIX sur Windows). On trouve aussi une impl�mentation dans cygwin.

    Citation Envoy� par Klaim Voir le message
    Donc la declaration de cette lambda modifierai comment les elements references sont definis en memoire? C'est une recette pour la confusion de l'utilisateur non?
    Pas plus selon moi que pour std::thread. En fait, on utilise la m�me d�finition que pour std::thread :

    Citation Envoy� par 30.3.1.2�4 de la norme C++11
    Effects: Constructs an object of type thread. The new thread of execution executes INVOKE (DECAY_COPY ( std::forward<F>(f)), DECAY_COPY (std::forward<Args>(args))...) with the calls to DECAY_COPY being evaluated in the constructing thread. Any return value from this invocation is ignored.
    Le DECAY_COPY(std::forward<T>(t)) est assez sp�ciale dans son style (cf. 30.2.6 �1 de la norme C++11). decay_copy est une pseudo-fonction de la norme. Son code est le suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    template <class T> typename decay<T>::type decay_copy(T&& v)
    { return std::forward<T>(v); }
    Au final, les arguments sont transmis par valeur au thread (ou au process).

    Ca, c'est si j'ai bien tout compris. Par contre, l'impl�mentation que j'en ai fait est un peu plus bancale (mais bon, c'est une premi�re impl�mentation).

    La relation de fork() avec la m�moire est assez sp�ciale :

    Citation Envoy� par man 3 fork
    Memory mappings created in the parent shall be retained in the child process. MAP_PRIVATE mappings inherited from the parent shall also be MAP_PRIVATE mappings in the child, and any modifications to the data in these mappings made by the parent prior to calling fork() shall be visible to the child. Any modifications to the data in MAP_PRIVATE mappings made by the parent after fork() returns shall be visible only to the parent. Modifications to the data in MAP_PRIVATE mappings made by the child shall be visible only to the child.
    Ce qui signifie que toute page mapp�e de mani�re publique dans le processus p�re est mapp�e dans le processus fils, et que les pages priv�es sont purement et simplement copi�es (via un syst�me du type copy-on-write sur Linux, histoire d'�viter les probl�mes).

    Une variable modifi�e dans le fils ne sera pas modifi�e dans le parent. Le fait de passer une variable par r�f�rence n'aura donc pas d'incidence sur le parent, mais �a reste possible et compl�tement valide.
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  10. #10
    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
    Par d�faut
    Donc en fait la ou je suis dubitatif c'est plus sur des features et trucs de memoire ou j'y connais que dale. Si ca fonctionne bien selon ce que tu decris alors ca a l'air effectivement pas mal. Je vais regarder plus en detail l'interface.

  11. #11
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    @Emmanuel Deloget
    Bon, honn�tement, tu m'as perdu l� Je dois avouer ne pas m'y conna�tre assez.

    J'utilise un peu QProcess (regarde aussi son API pour voir ce que propose Qt pour �a) et j'ai lu http://www.macieira.org/blog/2012/07...sed-solutions/ (le blog de Thiago Macieira, maintener de QtCore, qui bosse sur les process), mais c'est hors de mes comp�tences (je suis pas fan de l'aspect syst�me)

    Sinon, pour boost.process, c'est effectivement une proposition qui n'a pas �t� inclut enti�rement dans boost, mais par morceau (en particulier boost.interprocess). La similarit� du design de la page de doc avec boost m'a induit en erreur : http://www.highscore.de/boost/process/
    Peut �tre rechercher pourquoi �a n'a pas �t� int�gr� � boost ? Tu auras probablement des critiques similaires si tu proposes �a dans le standard

    Sinon, je vais peut �tre dire une b�tise (encore)... tu dis que ton api est similaire � std::thread, qu'il faudra des moyens de communication comme std::thread, boost.interprocess fonctionne aussi bien avec les process que les threads, etc. Finalement, quelle est la diff�rence entre std:thread et std::process ? Ne seraient-ils pas suffisamment similaire pour avoir qu'une seule classe + les diff�rentier avec une politique � la construction + jouer avec les mod�les m�moires ? Parce que finalement, j'ai l'impression que, � part � la construction, la manipulation des 2 types est identique, non ?

  12. #12
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par gbdivers Voir le message
    @Emmanuel Deloget
    Bon, honn�tement, tu m'as perdu l� Je dois avouer ne pas m'y conna�tre assez.

    J'utilise un peu QProcess (regarde aussi son API pour voir ce que propose Qt pour �a) et j'ai lu http://www.macieira.org/blog/2012/07...sed-solutions/ (le blog de Thiago Macieira, maintener de QtCore, qui bosse sur les process), mais c'est hors de mes comp�tences (je suis pas fan de l'aspect syst�me)
    Je vais regarder �a attentivement.

    Citation Envoy� par gbdivers Voir le message
    Sinon, pour boost.process, c'est effectivement une proposition qui n'a pas �t� inclut enti�rement dans boost, mais par morceau (en particulier boost.interprocess). La similarit� du design de la page de doc avec boost m'a induit en erreur : http://www.highscore.de/boost/process/
    Peut �tre rechercher pourquoi �a n'a pas �t� int�gr� � boost ? Tu auras probablement des critiques similaires si tu proposes �a dans le standard
    boost.process, c'est le serpent de mer de boost. Ca r�aparait de temps en temps, et puyis �a disparait.

    Ceci dit, tu as raison : il faut que je retrouve les revues de la proposition, histoire de voir ce qui coince et de ne pas refaire les m�me erreurs.

    Je vais peut-�tre proposer ma solution � boost aussi, mais �a, je n'en suis pas encore s�r. Le design que j'ai en t�te est assez �loign� de la vision boost, et je doit aussi avouer que faire le code pour des dizaines de compilateurs et de syst�mes, �a ne me plait pas plus que �a

    Citation Envoy� par gbdivers Voir le message
    Sinon, je vais peut �tre dire une b�tise (encore)... tu dis que ton api est similaire � std::thread, qu'il faudra des moyens de communication comme std::thread, boost.interprocess fonctionne aussi bien avec les process que les threads, etc.
    Exactement : les threads et les process sont des entit�s quasiment identiques. Les communications interprocess fonctionnent donc tr�s bien en interthread aussi

    Le truc, c'est que certains m�canismes particuliers sont n�cessaires pour permettre � deux process de communiquer. Lorsqu'on cr�e un mutex dans un programme multithread, ce mutex est visible par tous les threads (sauf, bien �videmment, s'il est cr�� dans la zone de m�moire propre au thread ; ce qui est de toute fa�on une erreur de design). Mais les process ne partageant pas leur espace m�moire, le mutex cr�� dans un process ne peut pas �tre utilis� par un autre process sans intervention de l'OS. Windows permet de nommer les mutex ; un autre process peut alors appeler OpenMutex() (au lieu de CreateMutex()) pour r�cup�rer ce mutex. Sous Linux, l'API POSIX ne permet pas de faire ce genre de chose, mais les IPC System V le peuvent - via un objet du type s�maphore (le mutex n'�tant qu'un cas particulier du s�maphore). Cependant, �a risque quand m�me d'�tre un peu compliqu� � impl�menter (parce que tout le monde peut changer le semcount, et que ce n'est pas une bonne id�e de permettre ce type de fonctionnement sur un mutex )

    Citation Envoy� par gbdivers Voir le message
    Finalement, quelle est la diff�rence entre std:thread et std::process ? Ne seraient-ils pas suffisamment similaire pour avoir qu'une seule classe + les diff�rentier avec une politique � la construction + jouer avec les mod�les m�moires ? Parce que finalement, j'ai l'impression que, � part � la construction, la manipulation des 2 types est identique, non ?
    La manipulation est identique, oui, mais pas suffisament pour n'en faire qu'une seule classe au niveau du standard. Apr�s, le vendeur d'une libstdc++ est libre de l'impl�menter comme il veux, y compris de la mani�re que te le d�crit.
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  13. #13
    Membre Expert
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par d�faut
    Citation Envoy� par Emmanuel Deloget Voir le message
    Non, pas n�cessairement. Les IPC sont de toute fa�on pr�vus dans le proposal, je r�fl�chi encore � leur forme. Je veux y int�grer :

    * pipe
    * shm
    * mutex nomm�s
    * s�maphores nomm�s (il faudra peut-�tre un autre proposal pour les s�maphores normaux)
    * queue de message

    Ces diff�rents syst�me posent pas mal de probl�me, donc je suis preneur pour toute id�e ou toute formalisation.
    Oui excuse moi, petite confusion de ma part, je voyais le passage par r�f�rence comme un moyen de "lier" un object entre le p�re et le fils, alors qu'en fait l'objet est copi� (et donc compl�tement diff�rent entre le p�re et le fils) dans tous les cas, c'est juste un passage par valeur / r�f�rence classique.

    Citation Envoy� par Emmanuel Deloget Voir le message
    Sous Linux, l'API POSIX ne permet pas de faire ce genre de chose, mais les IPC System V le peuvent - via un objet du type s�maphore (le mutex n'�tant qu'un cas particulier du s�maphore). Cependant, �a risque quand m�me d'�tre un peu compliqu� � impl�menter (parce que tout le monde peut changer le semcount, et que ce n'est pas une bonne id�e de permettre ce type de fonctionnement sur un mutex )
    Si tu veux impl�menter un syst�me de groupe o� seule une liste d'user / de pid / de nom de process (enfin se qu'on veut, comme ce qu'il y a sous Windows il me semble) peut acc�der au mutex, l�, c'est du dev niveau kernel et tu ne pourras pas faire grand chose
    C'est vrai que laisser un mutex / s�maphore en "acc�s libre" est sujet � des bugs / exploits (il suffit qu'un autre process utilise un mutex / s�maphore du m�me nom et au revoir la synchronisation), mais ... je ne vois pas vraiment de solution. En esp�rant que quelqu'un trouve quelque chose.

  14. #14
    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
    Par d�faut
    Citation Envoy� par gbdivers Voir le message
    Sinon, pour boost.process, c'est effectivement une proposition qui n'a pas �t� inclut enti�rement dans boost, mais par morceau (en particulier boost.interprocess). La similarit� du design de la page de doc avec boost m'a induit en erreur : http://www.highscore.de/boost/process/
    Peut �tre rechercher pourquoi �a n'a pas �t� int�gr� � boost ? Tu auras probablement des critiques similaires si tu proposes �a dans le standard
    Boost.Process dans son etat actuel, et meme des versions d'avant, je fais partie des personnes qui l'ont critique sur la mailing list de boost.
    Globalement il presente 2 problemes majeurs:
    1. L'interface n'est pas du tout similaire a std/boost::thread, ce qui en soit indique pas mal de soucis;
    2. On ne peut pas completement utiliser l'interface de boost.process sans manipuler des types specifiques aux plateformes. C'est le point qui fait que la discussion tourne au statu-quo: tant que l'auteur ne fera pas en sortes que la meme chose soit faisable quel que soit la plateforme avec la meme interface, ca posera probleme. Le souci que l'auteur pointe c'est que comme les OS ont des facons differentes de gerer les processus, les effets de bords niveau performance du a la necessite de simuler du comportement dans boost.process, font que c'est pas acceptable pour l'utilisateur. Mais personellement j'en ai un peu rien a faire de l'implementation et des perfs sur ce genre de manipulations tant que ca fais la meme chose sur toutes les plateformes. C'est pas comme si on allait lancer des process dans des boucles critiques.

    Pour l'instant je pense qu'Emmanuel ne tombe pas dans ces problemes donc ca deviens tres interessant meme pour boost.

    Je vais peut-�tre proposer ma solution � boost aussi, mais �a, je n'en suis pas encore s�r. Le design que j'ai en t�te est assez �loign� de la vision boost, et je doit aussi avouer que faire le code pour des dizaines de compilateurs et de syst�mes, �a ne me plait pas plus que �a
    Qu'est-ce qui te fais penser que ca colle pas a boost?
    Pour les systemes je pensais que la plupart etaient sous unix-like?

  15. #15
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par Iradrille Voir le message
    Si tu veux impl�menter un syst�me de groupe o� seule une liste d'user / de pid / de nom de process (enfin se qu'on veut, comme ce qu'il y a sous Windows il me semble) peut acc�der au mutex, l�, c'est du dev niveau kernel et tu ne pourras pas faire grand chose
    C'est vrai Je vais donc surtout ne pas chercher � aller l�

    Citation Envoy� par Iradrille Voir le message
    C'est vrai que laisser un mutex / s�maphore en "acc�s libre" est sujet � des bugs / exploits (il suffit qu'un autre process utilise un mutex / s�maphore du m�me nom et au revoir la synchronisation), mais ... je ne vois pas vraiment de solution. En esp�rant que quelqu'un trouve quelque chose.
    Oui et non. En fait, suite � m� derni�re r�ponse, je me suis fait la m�me remarque (et la remarque attenante : si j'utilise un s�maphore pour faire un mutex, alors je ne peux pas lier le s�maphore � un thread sans un mutex nomm� pour emp�cher les acc�s concurrent au threadid li� ; les serpents n'aiment pas se mordre la queue...) je penchait pour un pseudo-mutex contenu dans une zone de m�moire partag�e (pour l'impl�mentation Linux). L'appel syst�me futex(2) permettrait en th�orie de g�rer ce type de choses - il faut juste l'utiliser correctement. Le m�me appel syst�me devrait permettre d'impl�menter correctement les s�maphores (ou pas ; mais de toute fa�on, linux propose deux interfaces pour les impl�menter : System V et POSIX (pas via la librairie pthread)).

    Le probl�me du nom global est impossible � r�soudre : il faut faire confiance au programmeur. Si un programme d�cide de cr�er un mutex nomm�, alors il est acc�ssible � d'autres programmes ; sous Linux, on peut limiter cet acc�s aux programmes du m�me utilisateur. Sous Windows, j'ai un doute � ce sujet. Mais m�me en limitant l'acc�s au mutex nomm�, on ouvre quand m�me la porte � une attaque par d�ni de service - d�s que le mutex est down, on peut le r�cup�rer et bloquer les programmes utilisateurs.

    Je vais faire un test sous peu, histoire de voir dans quelle mesure �a peut �tre mis en place, et je vous tiens au courant.
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  16. #16
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par Klaim Voir le message
    Boost.Process dans son etat actuel, et meme des versions d'avant, je fais partie des personnes qui l'ont critique sur la mailing list de boost.
    Globalement il presente 2 problemes majeurs:
    1. L'interface n'est pas du tout similaire a std/boost::thread, ce qui en soit indique pas mal de soucis;
    2. On ne peut pas completement utiliser l'interface de boost.process sans manipuler des types specifiques aux plateformes. C'est le point qui fait que la discussion tourne au statu-quo: tant que l'auteur ne fera pas en sortes que la meme chose soit faisable quel que soit la plateforme avec la meme interface, ca posera probleme. Le souci que l'auteur pointe c'est que comme les OS ont des facons differentes de gerer les processus, les effets de bords niveau performance du a la necessite de simuler du comportement dans boost.process, font que c'est pas acceptable pour l'utilisateur. Mais personellement j'en ai un peu rien a faire de l'implementation et des perfs sur ce genre de manipulations tant que ca fais la meme chose sur toutes les plateformes. C'est pas comme si on allait lancer des process dans des boucles critiques.

    Pour l'instant je pense qu'Emmanuel ne tombe pas dans ces problemes donc ca deviens tres interessant meme pour boost.
    Points int�ressants. Je promet de ne pas tomber dans ce travers. Comme tu le dis, on ne cr�e pas de process dans des boucles critiques (de toute fa�on, cr�er un process est en soit une des op�rations les plus lourdes qu'on peut faire sur un syst�me).

    Citation Envoy� par Klaim Voir le message
    Qu'est-ce qui te fais penser que ca colle pas a boost?
    Ben, entre autre, j'essaie d'avoir du code lisible

    Sans plaisanter, je souhaite m'affranchir de tout ce qui est ant�rieur � C++11 ; C++98 force � faire certaines concessions dans le design (cf. boost.thread) que je n'ai pas envie de faire. De plus, je n'ai pas vraiment le temps mat�riel pour bien travailler un support de boost, donc �a me parait hasardeux de me lancer dans cette entreprise.

    Maintenant, si quelqu'un ma�trise bien boost et souhaite me guider/m'aider dans cette t�che, je n'y vois strictement aucun inconv�nient - je suis m�me plut�t pour !

    Citation Envoy� par Klaim Voir le message
    Pour les systemes je pensais que la plupart etaient sous unix-like?
    unix-like (sauf Windows), certes, mais avec des diff�rences parfois importantes : AIX, BSD et Linux ne proposent pas les m�mes appels syst�mes - et �a, �a fait peur :

    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
     
    Compilers Tested
    Boost's primary test compilers are:
     
    Linux:
      GCC: 4.1.2, 4.2.4, 4.4.4, 4.5.3, 4.6.3, 4.7.2
      GCC, C++11 mode: 4.4.4, 4.5.3, 4.6.3, 4.7.2
      Intel: 11.1, 12.1
      LLVM Clang: 2.8
      LLVM Clang, with libc++: 3.2
    OS X:
      GCC: 4.4.7
      GCC, C++11 mode: 4.4.4
      Intel: 11.1, 12.0
    Windows:
      Visual C++: 9.0, 10.0
    FreeBSD:
      GCC: 4.2.1, 32 and 64 bit
    Le support C++ �tant diff�rent d'un compilateur � l'autre, �a risque fort d'�tre tr�s fun
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  17. #17
    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
    Par d�faut
    Personellement, si tu peux passer direct a la standardisation et voir plus tard pour une implementation dans boost, je pense que ca sera plus rentable sur le long terme pour tout le monde.

  18. #18
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par Klaim Voir le message
    Personellement, si tu peux passer direct a la standardisation et voir plus tard pour une implementation dans boost, je pense que ca sera plus rentable sur le long terme pour tout le monde.
    C'est une possibilit�. De toute fa�on, mener les deux de fronts me semble complexe pour moi tout seul.
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  19. #19
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Bonjour,

    j'ai fait quelques �volutions int�ressantes :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    7e7080d Wed Apr 3 17:51:25 2013 +0200 <[email protected]>: proposal: start to write the definition of named_mutex
    c172e58 Wed Apr 3 17:48:57 2013 +0200 <[email protected]>: build: add *.lyx# to the ignore list
    59aa6ef Wed Apr 3 17:48:31 2013 +0200 <[email protected]>: named_mutex: remove an unneeded trace
    3535b21 Wed Apr 3 17:32:57 2013 +0200 <[email protected]>: named_mutex: first implementation
    1a38528 Wed Apr 3 15:51:31 2013 +0200 <[email protected]>: process: make __throw functions inline
    71fd4ee Wed Apr 3 11:43:29 2013 +0200 <[email protected]>: build: adding all object and archive files to the ignore list
    e8c9e97 Wed Apr 3 11:12:42 2013 +0200 <[email protected]>: build: add further dependencies on ptest.o
    ab6cbeb Tue Apr 2 20:38:15 2013 +0200 <[email protected]>: hash: move the hash function into the __bits namespace
    27cd63e Tue Apr 2 17:51:55 2013 +0200 <[email protected]>: build: remove trailing whitespaces
    92851a0 Tue Apr 2 17:33:34 2013 +0200 <[email protected]>: process: introduce bits/gen_all.h
    0f9ffee Tue Apr 2 17:32:21 2013 +0200 <[email protected]>: hash: include guard shall be implementation-reserved
    36c55d7 Tue Apr 2 17:13:33 2013 +0200 <[email protected]>: process: externalize __posix_tag
    Le principal ajout est la classe named_mutex, qui, comme son nom l'indique, est un mutex nomm�. Une impl�mentation possible pour Linux est donn�e (� base de shared memory et de futex).

    Le code est disponible ici : https://code.google.com/p/edt-process-cpp1y/

    Un named_mutex est un mutex (donc il est possible de l'utiliser en lieu et place d'un mutex dans un programme) qui est partag� entre plusieurs processus. Le premier processus cr�e le named_mutex, tandis que les autres ne font que l'ouvrir (c'est transparent pour l'utilisateur).

    Les classes named_timed_mutex, named_recursive_mutex et named_timed_recursive_mutex sont en cours d'�tude. Je devrais pouvoir les coder assez rapidement si besoin.

    J'ai quand m�me un probl�me dans le code disponible sur google code. La fonction check_named_mutex() dans src/ptest.cc ne se comporte pas correctement. Les destructeurs de named_mutex ne sont jamais appel�s. A l'heure actuelle, je ne saiss pas encore si �a vient d'une mauvaise utilisation de std::exit(), de fork() ou d'autre chose. Mes investigation viennent de commencer. Bien �videmment, si vous voulez m'aider, n'h�sitez pas !

    Pour contourner le probl�me pos� par ce bug, il faut simplement effacer � la main le fichier /dev/shm/test-named-mutex de temps en temps. Normallement, si les destructeurs s'ex�cutent normallement, ce fichier s'autod�truit lorsque le dernier utilisateur du named_mutex d�truit celui-ci.
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  20. #20
    Membre Expert
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par d�faut
    Citation Envoy� par Emmanuel Deloget Voir le message
    J'ai quand m�me un probl�me dans le code disponible sur google code. La fonction check_named_mutex() dans src/ptest.cc ne se comporte pas correctement. Les destructeurs de named_mutex ne sont jamais appel�s. A l'heure actuelle, je ne saiss pas encore si �a vient d'une mauvaise utilisation de std::exit(), de fork() ou d'autre chose. Mes investigation viennent de commencer. Bien �videmment, si vous voulez m'aider, n'h�sitez pas !
    Ca vient de std::exit
    Destructors of variables with automatic storage durations are not called.
    (C'est bien le cas ici ?)

Discussions similaires

  1. R�ponses: 20
    Dernier message: 04/03/2014, 14h13
  2. Dos create process "Appuyer sur une touche pour continuer"
    Par inspecteur rick dans le forum D�buter
    R�ponses: 2
    Dernier message: 31/12/2009, 12h23
  3. comment faire une proposition pour la faq
    Par ddrmax dans le forum C++Builder
    R�ponses: 3
    Dernier message: 31/07/2008, 09h05
  4. Proposition pour une connexion sans fil
    Par warning dans le forum Hardware
    R�ponses: 6
    Dernier message: 10/04/2008, 13h22

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