Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1307 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  processus

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

processus

n°171037
Gaspard
Posté le 04-07-2002 à 11:54:49  profilanswer
 

Bonjour,
 
Comment je peux faire pour qu'un processus père puisse avoir accès à un tableau de caractères dont le propriétaire est son processus fils?

mood
Publicité
Posté le 04-07-2002 à 11:54:49  profilanswer
 

n°171046
BENB
100% Lux.
Posté le 04-07-2002 à 12:06:33  profilanswer
 

Gaspard a écrit a écrit :

Bonjour,
 
Comment je peux faire pour qu'un processus père puisse avoir accès à un tableau de caractères dont le propriétaire est son processus fils?




mets ce tableau dans un segment de shared memory...

n°171048
joce
Architecte / Développeur principal
"BugHunter"
Posté le 04-07-2002 à 12:08:48  profilanswer
 

une bonne claque dans la gueule et le problème est réglé :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°171144
Gaspard
Posté le 04-07-2002 à 13:52:44  profilanswer
 

BENB, pour le segment de mémoire partagée, si j'ai bien compris il faut que j'utilise qqch comme shmget()

n°171152
Jar Jar
Intaigriste
Posté le 04-07-2002 à 13:57:26  profilanswer
 

Gaspard a écrit a écrit :

BENB, pour le segment de mémoire partagée, si j'ai bien compris il faut que j'utilise qqch comme shmget()


Il y a beaucoup plus simple : les threads POSIX.
man pthread_create


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°171205
Gaspard
Posté le 04-07-2002 à 14:37:37  profilanswer
 

J'ai pas envie de refaire tout mon programme en utilisant des thread plutôt que des processus alors je pense que je vais faire ce que me conseille BENB

n°171207
Jar Jar
Intaigriste
Posté le 04-07-2002 à 14:38:17  profilanswer
 

Gaspard a écrit a écrit :

J'ai pas envie de refaire tout mon programme en utilisant des thread plutôt que des processus


Bah rien ne t'empêche de mélanger les deux...


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°171296
darkoli
Le Petit Dinosaure Bleu
Posté le 04-07-2002 à 15:59:01  profilanswer
 

joce a écrit a écrit :

une bonne claque dans la gueule et le problème est réglé :D




 
Faut mettre des chaussettes. :D


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°171411
BENB
100% Lux.
Posté le 04-07-2002 à 18:10:28  profilanswer
 

Jar Jar a écrit a écrit :

Il y a beaucoup plus simple : les threads POSIX.
man pthread_create




Non au contraire... C'est bien plus compliqué avec des Threads...
 
La au moins il n'y a que le segment de memoire où il peut a avoir conflit d'acces, il n'y a aucun Pb de reponse à un signal, etc...
 
Contrairement a bcp d'idées reçues, le multi-process est plutot plus simple que le multi-thread, surtout si les différentes taches sont vraiment decouplées...
 
Sinon ou shmget pour l'allouer ou le retrouver...
ipcs pour le voir depuis la ligne de commande...

n°171442
joce
Architecte / Développeur principal
"BugHunter"
Posté le 04-07-2002 à 19:29:30  profilanswer
 

et ipcrm quand t'as chié dans la colle :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
mood
Publicité
Posté le 04-07-2002 à 19:29:30  profilanswer
 

n°171448
darkoli
Le Petit Dinosaure Bleu
Posté le 04-07-2002 à 19:48:57  profilanswer
 

BENB a écrit a écrit :

 
Non au contraire... C'est bien plus compliqué avec des Threads...
 
La au moins il n'y a que le segment de memoire où il peut a avoir conflit d'acces, il n'y a aucun Pb de reponse à un signal, etc...
 
Contrairement a bcp d'idées reçues, le multi-process est plutot plus simple que le multi-thread, surtout si les différentes taches sont vraiment decouplées...
 
Sinon ou shmget pour l'allouer ou le retrouver...
ipcs pour le voir depuis la ligne de commande...




 
Sous unix y'a pvm : Paralel(l) Virtual Machine ou un truc dans le genre.


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°171614
Jar Jar
Intaigriste
Posté le 05-07-2002 à 09:48:49  profilanswer
 

BENB a écrit a écrit :

Non au contraire... C'est bien plus compliqué avec des Threads...


Pour avoir expérimenté les deux, je ne trouve pas DU TOUT...
Après, c'est peut-être une question de goûts et de méthodes, mais bon...


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°171642
BENB
100% Lux.
Posté le 05-07-2002 à 10:10:39  profilanswer
 

Jar Jar a écrit a écrit :

Pour avoir expérimenté les deux, je ne trouve pas DU TOUT...
Après, c'est peut-être une question de goûts et de méthodes, mais bon...




Peut-etre n'es tu pas allé au fonds des choses...
 
Conflits d'acces memoire limites au segments de memoires partagés en multi-process
 
Parties de codes non reentrantes ne genent pas en multi-process
 
Enfin la gestion des signaux ne pose aucun problèmes en multiprocess...

n°171665
Jar Jar
Intaigriste
Posté le 05-07-2002 à 10:42:56  profilanswer
 

BENB a écrit a écrit :

Conflits d'acces memoire limites au segments de memoires partagés en multi-process


Le fait que la mémoire soit la même n'est pas un problème mais ce qu'on recherche quand on fait des threads. À moins de programmer comme un porc, les threads ne vont pas s'amuser à aller tout le temps écrire dans la même zone mémoire.
 

Citation :

Parties de codes non reentrantes ne genent pas en multi-process

Du code non réentrant ? Ça existe ?
 

Citation :

Enfin la gestion des signaux ne pose aucun problèmes en multiprocess...

Ça, c'est un problème lié uniquement à l'implémentation LinuxThreads, pas aux threads en eux-mêmes. Pthreads-NG devrait résoudre ça en se conformant correctement à POSIX.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°171675
LeGreg
Posté le 05-07-2002 à 10:50:26  profilanswer
 

Citation :

Du code non réentrant ? Ça existe ?


 
Plusieurs fonctions de la librairie standard
sont non reentrantes.
En gros, celles qui ont un état interne codé
avec un bon vieux "static".
 
Il existe des versions reentrantes des fonctions de librairies
en general avec un _r ajouté à la fin mais evidemment leur prototype est different.
 
La compatibilité avec les threads, a l'epoque ou je codais
sous Linux, n'était pas tres bonne puisque deux threads
pouvaient avoir besoin de ces fonctions en simultané d'ou la necessité de coder avec les versions reentrantes (a moins de tout proteger avec des sections critiques mais bof..).
 
LeGreg

n°171684
BENB
100% Lux.
Posté le 05-07-2002 à 10:57:10  profilanswer
 

Jar Jar a écrit a écrit :

Le fait que la mémoire soit la même n'est pas un problème mais ce qu'on recherche quand on fait des threads. À moins de programmer comme un porc, les threads ne vont pas s'amuser à aller tout le temps écrire dans la même zone mémoire.
 

Citation :

Parties de codes non reentrantes ne genent pas en multi-process

Du code non réentrant ? Ça existe ?
 

Citation :

Enfin la gestion des signaux ne pose aucun problèmes en multiprocess...

Ça, c'est un problème lié uniquement à l'implémentation LinuxThreads, pas aux threads en eux-mêmes. Pthreads-NG devrait résoudre ça en se conformant correctement à POSIX.




Le code non reentrant, oui ca existe, et en grande quantité, surtout quand tu travailles sur une application ancienne et de grande taille !
 
La programmation des Threads n'est pas impossible, et tout ce que je cite se resouds, mais en multiprocess, ces problèmes ne se posent pas, d'ou une plus grande simplicité...

n°171802
Jar Jar
Intaigriste
Posté le 05-07-2002 à 12:15:21  profilanswer
 

legreg a écrit a écrit :

Plusieurs fonctions de la librairie standard
sont non reentrantes.
En gros, celles qui ont un état interne codé
avec un bon vieux "static".
 
Il existe des versions reentrantes des fonctions de librairies
en general avec un _r ajouté à la fin mais evidemment leur prototype est different.


gcc -D_REENTRANT
(oui, je sais, toutes les libc ne sont pas aussi bien foutues que la glibc)


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°171813
trueslash
(╯°□°)╯︵ MMM
Posté le 05-07-2002 à 12:44:37  profilanswer
 

joce a écrit a écrit :

et ipcrm quand t'as chié dans la colle :D




 
et tous les soir, les profs scannent les machines et zou, - 1 pt par IPC et par taches retrouvés :D

n°171832
LeGreg
Posté le 05-07-2002 à 13:16:53  profilanswer
 

Jar Jar a écrit a écrit :

gcc -D_REENTRANT
(oui, je sais, toutes les libc ne sont pas aussi bien foutues que la glibc)




 
je crois que tu n'as pas bien compris le probleme.
 
Le fait de specifier le flag _REENTRANT
ne rend pas reentrantes les fonctions qui  
intrinsequement ne peuvent pas l'etre.
 
asctime() n'est pas reentrante meme avec le flag _REENTRANT
parce que la chaine de retour est stockée comme
un static char result[].
 
en cas de programme multithread
il FAUT utiliser asctime_r.
 
De plus la reentrance n'est pas seulement un probleme
pour les applications multithreads
mais également celles qui font des appels
successifs à la meme fonction: on s'attend
a ce qu'un deuxieme appel à la fonction de temps
ne change pas la premiere valeur retournée.
(c'est comme si on te donnait un bonbon, et  
que la personne qui te l'a donné vienne te le reprendre
pour le donner a quelqu'un d'autre)
 
LeGreg

n°171862
BENB
100% Lux.
Posté le 05-07-2002 à 13:40:17  profilanswer
 

LeGreg > et surtout ce flag ne change pas les fonctions qui ne font pas partie de bibliotheque standard...
 
Fonction quelques fois ecrites en FORTRAN, ou à une epoque ou la notion de multi-threading n'existait meme pas...

n°172029
Jar Jar
Intaigriste
Posté le 05-07-2002 à 16:06:07  profilanswer
 

legreg a écrit a écrit :

Le fait de specifier le flag _REENTRANT
ne rend pas reentrantes les fonctions qui  
intrinsequement ne peuvent pas l'etre.
 
asctime() n'est pas reentrante meme avec le flag _REENTRANT
parce que la chaine de retour est stockée comme
un static char result[].


Évidemment... Mais quand on fait du MT, c'est typiquement le genre de fonction qu'on appelle dans un thread et pas dans les autres. Sinon, bien sûr, on n'a pas le choix, il faut utiliser un mutex. C'est quand même pas bien sorcier...


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°172117
LeGreg
Posté le 05-07-2002 à 18:10:49  profilanswer
 

ah oui et tu communiques
comment le fait qu'il faut entourer les sections
critiques avec un mutex??
et tu le places ou ton mutex, dans un header
public? dans un wrapper qui transforme
asctime en truc reentrant?
 
C'est pas mieux de compter sur l'intelligence de tes
collegues (tout est relatif, on en a bien la preuve)
pour ne pas utiliser les fonctions de librairie
non threadsafe?  
 
Surtout que au final si tu regardes le code
de asctime(), tout cela va finir par
un appel a asctime_r
et c'est bien dommage d'utiliser une section
critique pour ca..
 
LeGreg

n°417415
fabriceMer​c
Posté le 05-06-2003 à 10:57:49  profilanswer
 

ce n'est pas plus dur avec les threads étant donné que avec tu n'as pas à créer ton mutex avec des sémaphore une fonction est concu pour ca.


---------------
L'été il fait bo
n°417422
chrisbk
-
Posté le 05-06-2003 à 11:00:05  profilanswer
 

DarkOli a écrit :


 
Sous unix y'a pvm : Paralel(l) Virtual Machine ou un truc dans le genre.


 
heuh oui, mais c koi le rapport [:le kneu]

n°417581
konar_spre​me
Posté le 05-06-2003 à 11:45:53  profilanswer
 

Gaspard a écrit :

Bonjour,
 
Comment je peux faire pour qu'un processus père puisse avoir accès à un tableau de caractères dont le propriétaire est son processus fils?


 
Je tiens a dire ke je respecte fortement les gens ki ont deviné l'OS et le langage... Franchement bravo les gars, paske le sujet etait kan meme "tres" precis.
Aller, juste pour faire chier je vais dopnner la solution ms sous Win32 :  

Code :
  1. // Processus 1
  2. DWORD uBytes = // taille du bordel
  3. HANDLE hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, (DWORD)uBytes, "FileMapping_a_moi" );
  4.        
  5. LPVOID lpMapAddress = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  6. CopyMemory(lpMapAddress, lpBuffer /* Mon buffer de donnees */, uBytes);


Code :
  1. // Processus 2
  2. hMapFile = OpenFileMapping(FILE_MAP_READ, FALSE, "FileMapping_a_moi" );
  3. lpMapAddress = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);
  4. if (lpMapAddress == NULL)
  5. break;
  6. // Faire du bordel avec lpMapAdress      
  7. UnmapViewOfFile(lpMapAddress);
  8. CloseHandle(hMapFile);


 
Donc, ya les FileMapping, ms ya aussi les named pipes (sous 2K) par exemple. Et encore plein de solutions.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  processus

 

Sujets relatifs
processus caches sous XP NT 2000[VB] Processus qui s'arrête avant la fin des traitements.
Gestion des signaux/processus en C ...[C++Builder] Processus et tache de fond
[Delphi] priorité d'un processus[VC] Kill un processus
[Apache/Unix] Processus qui boucle[C++ / API ] Gestion de processus sous Win
[JAVA] lancement de processus ....[C & Linux] comment "tuer" un processus ?
Plus de sujets relatifs à : processus


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR