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

  FORUM HardWare.fr
  Programmation
  C

  multithread , sémaphore, linux : endormir un thread.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

multithread , sémaphore, linux : endormir un thread.

n°565681
xilebo
noone
Posté le 13-11-2003 à 11:32:12  profilanswer
 

salut,
 
je dois implementer des semaphore sous linux (suite a des problemes rencontrés ) et dans l algo je vois qu il faut endormir le processus  appelant pour P()  , et reveiller le premier processus de la liste  (si il y en a ) pour V().
 
Les processus que j endors sont en fait des threads. Et je pense utiliser la fonction pause() pour endormir le thread.
 
Est ce une bonne solution ?
 
Et je n ai pas trouvé le signal pour reveiller un thread endormi avec pause(). Je sais qu il faut appeler la fonction signal() mais avec quels parametres ?
 
 
merci de votre aide.
 
 
PS : existe il une implementation des semaphores en C sous linux ?

mood
Publicité
Posté le 13-11-2003 à 11:32:12  profilanswer
 

n°565690
Moktar1er
No one replies...
Posté le 13-11-2003 à 11:43:53  profilanswer
 

xilebo a écrit :

salut,
 
je dois implementer des semaphore sous linux (suite a des problemes rencontrés ) et dans l algo je vois qu il faut endormir le processus  appelant pour P()  , et reveiller le premier processus de la liste  (si il y en a ) pour V().
 
Les processus que j endors sont en fait des threads. Et je pense utiliser la fonction pause() pour endormir le thread.
 
Est ce une bonne solution ?
 
Et je n ai pas trouvé le signal pour reveiller un thread endormi avec pause(). Je sais qu il faut appeler la fonction signal() mais avec quels parametres ?
 
 
merci de votre aide.
 
 
PS : existe il une implementation des semaphores en C sous linux ?


 
man ipc
les liens vers les msgxxx(), les semxxx() et les shmxxx() tu suivras
ton bonheur trouveras

n°565692
VisualC++
J'va y penser ...
Posté le 13-11-2003 à 11:46:34  profilanswer
 

man semaphore aussi :D

n°565789
xilebo
noone
Posté le 13-11-2003 à 13:49:52  profilanswer
 

merci bien :) je vais voir ca. Apparemment de toutes facons pour que ce soit reellement efficace, il vaut mieux utiliser ces fonctions que tenter de les réimplémenter.

n°566101
bjone
Insert booze to continue
Posté le 13-11-2003 à 20:47:15  profilanswer
 

P & V viennent de la description des sémphores faite par Dijkstra.
 
pas tapay si je dis des bêtises ;)

n°566102
bjone
Insert booze to continue
Posté le 13-11-2003 à 20:48:52  profilanswer
 

xilebo a écrit :

merci bien :) je vais voir ca. Apparemment de toutes facons pour que ce soit reellement efficace, il vaut mieux utiliser ces fonctions que tenter de les réimplémenter.


 
surtout que t'as aucunes chances vu que c'est au niveau noyau que c'est géré et gérable....

n°566334
xilebo
noone
Posté le 14-11-2003 à 00:10:14  profilanswer
 

BJOne a écrit :


 
surtout que t'as aucunes chances vu que c'est au niveau noyau que c'est géré et gérable....


 
oui, c est bien ca le probleme.
 
Bon j en profite pour glisser une petite question.
 
J'ai bien reussi a creer ma semaphore en faisant  
 

Code :
  1. sem = semget(SEMAPHORE_DRAW,1,IPC_CREAT);


 
(la valeur retournée correspond a mon id semaphore, SEMAPHORE_DRAW est un define sur une valeur clé que j'ai fixé).
 
ensuite je fixe mon compteur sur ma sémaphore à 0 (c est bien 0 les sections critiques?)de la facon suivante  :
 

Code :
  1. semctl(sem,0,SETVAL,arg);


 
Cet appel reussit egalement (retour 0 ) .
 
 
Par contre pour appeler ma semaphore en section critique, je n'ai pas bien compris leur explication dans les pages man de semop
 

Code :
  1. semop(sem,&op,flag);


 
le second parametre est une structure  

Code :
  1. short sem_num;
  2. short sem_op;
  3. short sem_flg;


 
 
je ne vois pas quoi mettre dans sem_op pour une section critique.
 
De plus, le 3eme parametre n est pas decrit dans les pages man.
 
 
Quelqu un peut il m eclairer ?

n°566374
bjone
Insert booze to continue
Posté le 14-11-2003 à 00:39:25  profilanswer
 

aloreure, je regarde mes docs (ça date, ça va faire longtemps que j'ai pas fait du nunux)
 
P() décrémente le compteur, si négatif le kernel mets le process/thread en attente
 
// section critique
 
P: semop avec sem_op à -1
V: semop avec sem_op à 1
 
le flags est à mettre 0, sinon y'a IPC_NOWAIT pour avoir un appel non bloquant...
 
V() incrémente le compteur, le kernel peut rendre la main à un autre process/thread


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

  multithread , sémaphore, linux : endormir un thread.

 

Sujets relatifs
portabilité windows/Linux du codeException in thread "main" org.omg.CORBA.COMM_FAILURE
Programmation en shell linux sous windows[Linux] Tester la presence d'un fichier
Script shell Linux > petit prob avev exprcomment killer un thread en python?
Rendre accessible à la JVM une librairie dynamique sous Linux[ Web / C / Linux / Php ] Une foule de questions...
prg sous Qt designer (linux)[windows thread/processes] Le Sleep sous windows n'est pas précis.
Plus de sujets relatifs à : multithread , sémaphore, linux : endormir un thread.


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