PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Serveur - Sécurité et techniques > fr.comp.os.linux.config > Sémaphores sous Linux
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
fr.comp.os.linux.config Prise en main d'un système Linux.

Sémaphores sous Linux

Réponse
 
LinkBack Outils de la discussion
Vieux 29/12/2006, 16h25   #1
Laurent
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Sémaphores sous Linux

Bonjour

Dans le cadre de la programmation de sémaphores sous Linux, j'ai besoin de poser 2 sémaphores de façon atomique sur deux variables différentes.

/* déclaration de la structure "operation"
struct sembuf *operation;


/* identifiant du sémaphore avec 500 éléments (le sémaphore existe déjà)
semid=semget(CLE_SEM, 500,0);


/* Si je veux poser une réservation par sémaphore sur l'accès n° 200 et 250 par exemple, je peux écrire :

/* opération P sur le sémaphore
operation.sem_num = 200;
operation.sem_op = -1;
operation.sem_flg = 0;
semop(semid,&operation,1);

operation.sem_num = 250;
operation.sem_op = -1;
operation.sem_flg = 0;
semop(semid,&operation,1);


/* opération V sur les sémaphores
operation.sem_num=200;
operation.sem_op=1;
operation.sem_flg=0;
semop(semid,&operation,1);

operation.sem_num=250;
operation.sem_op=1;
operation.sem_flg=0;
semop(semid,&operation,1);

/* cependant je voudrais poser un sémaphore sur deux indices "atomiquement" car dans l'exemple ci-dessus j'ai un risque de réordonnancement entre les deux opérations V et donc un risque d'interbloquage avec d'autres processus.

/* opération P sur le sémaphore d'indice 200 ET 250
operation.sem_num=200;
operation.sem_op = -1;
operation.sem_flg=0;

semop(semid,&operation,2);

Comment faut-il faire ?
Merci de votre aide...

  Réponse avec citation
Vieux 29/12/2006, 20h37   #2
Vincent Bernat
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Sémaphores sous Linux

OoO Lors de la soirée naissante du vendredi 29 décembre 2006, vers
17:25, "Laurent" <l_dubois92@hotmail.com> disait:

> Dans le cadre de la programmation de sémaphores sous Linux, j'ai besoin de
> poser 2 sémaphores de façon atomique sur deux variables différentes.


Ben, man semop. La fonction en question prend un tableau de sémaphores
(le dernier argument est la taille de celui-ci).
--
I WILL NOT CUT CORNERS
" " " " " "
" " " " " "
-+- Bart Simpson on chalkboard in episode 7F11
  Réponse avec citation
Vieux 29/12/2006, 21h30   #3
Laurent
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Sémaphores sous Linux

Alors il faut rédiger :



struct sembuf *operation[2];

semid=semget(CLE_SEM, 500,0);

/* opération P sur le sémaphore
operation[0].sem_num = 200;
operation[0].sem_op = -1;
operation[0].sem_flg = 0;


operation[1].sem_num = 250;
operation[1].sem_op = -1;
operation[1].sem_flg = 0;
semop(semid,&operation,2);

correct ?


"Vincent Bernat" <bernat@luffy.cx> a écrit dans le message de news:
m3hcvea16w.fsf@neo.luffy.cx...
> OoO Lors de la soirée naissante du vendredi 29 décembre 2006, vers
> 17:25, "Laurent" <l_dubois92@hotmail.com> disait:
>
>> Dans le cadre de la programmation de sémaphores sous Linux, j'ai besoin
>> de
>> poser 2 sémaphores de façon atomique sur deux variables différentes.

>
> Ben, man semop. La fonction en question prend un tableau de sémaphores
> (le dernier argument est la taille de celui-ci).
> --
> I WILL NOT CUT CORNERS
> " " " " " "
> " " " " " "
> -+- Bart Simpson on chalkboard in episode 7F11



  Réponse avec citation
Vieux 29/12/2006, 23h36   #4
Vincent Bernat
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Sémaphores sous Linux

OoO En cette soirée bien amorcée du vendredi 29 décembre 2006, vers
22:30, "Laurent" <l_dubois92@hotmail.com> disait:

> Alors il faut rédiger :
> struct sembuf *operation[2];


struct sembuf operation[2];

> semid=semget(CLE_SEM, 500,0);


> /* opération P sur le sémaphore
> operation[0].sem_num = 200;
> operation[0].sem_op = -1;
> operation[0].sem_flg = 0;



> operation[1].sem_num = 250;
> operation[1].sem_op = -1;
> operation[1].sem_flg = 0;
> semop(semid,&operation,2);


semop(semid, operation, 2)

> correct ?


Oui. Cela dit, si c'est un exercice, on ne s'attend pas à utiliser cet
"artifice" mais à jouer plus finement avec les sémaphores, voire à
implémenter des moniteurs de Hoare. C'est assez loin pour moi,
toutefois.
--
BOFH excuse #29:
It works the way the Wang did, what's the problem
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 14h34.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,11766 seconds with 12 queries