![]() |
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| HP-UX HP-UX (Hewlett Packard UniX) Hewlett-Packard est propriétaire de la mise en œuvre du système d'exploitation Unix, basés sur System V. |
Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
|
||||
| Fil | Thread Starter | Forum | Réponses | Last Post |
| Eviter les doublons dans un fichier | pssandeep | UNIX pour les nuls Questions et réponses | 7 | 03-26-2008 06:36 AM |
| AWK: Comment éviter System | sandeep_hi | De programmation et de script Shell | 0 | 06-23-2006 07:01 AM |
| Comment éviter historying ma commande | ting123 | UNIX pour les nuls Questions et réponses | 2 | 05-06-2006 05:58 AM |
| Eviter le spam en pin? | a25khan | UNIX pour les nuls Questions et réponses | 1 | 12-13-2003 10:50 AM |
| Comment verrouiller le clavier sans utiliser la commande de verrouillage | dianayun | UNIX pour les nuls Questions et réponses | 7 | 06-21-2002 07:05 PM |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
||||
|
éviter semphore lock
nous avons développé un ensemble de système V semphore interface pour notre application, en général, tous les travaux normaux, rarement cause de l'impasse. Voici quelques sem_wait et interface sem_post, pls point fixe à une suggestion de l'impasse problème:
Code:
int sem_wait_V(int id, struct sembuf *sem_pv)
{
sem_pv = new struct sembuf [1] ;
if (sem_op(id,-1, sem_pv)<0)
{
delete sem_pv ;
return -1;
}
delete sem_pv ;
return 0;
}
int sem_post_V(int id, int sem_post_value_V, struct sembuf *sem_pv)
{
if ((sem_post_value_V = semctl(id,0,GETVAL,0)) <0)
{
return -1;
}
if( sem_post_value_V > SEM_POST_LIMIT )
{
if( sem_post_value_V == SEM_POST_LIMIT + 1 ) return -1 ;
return -1 ;
}
sem_pv = new struct sembuf [1] ;
if (sem_op(id,1,sem_pv)<0)
{
delete sem_pv ;
return -1;
}
delete sem_pv ;
return 0;
}
int sem_op(int id,int value, struct sembuf sem_pv[1] )
{
int sem_value ,sem_value1;
sem_pv[0].sem_num = 0 ;
sem_pv[0].sem_flg = 0 ;
if ((sem_pv[0].sem_op =value) == 0)
{
printf("sem_op error: operator is zero !!!!!!!(%d)\n",id) ;
return -1;
}
if ((sem_value = semctl(id,0,GETVAL,0)) <0)
{
perror("semctl create GETVAL");
return -1;
}
again:;
if (semop(id,&sem_pv[0],1)<0)
{
sched_yield() ;
if(errno==EINTR)
{
if ((sem_value1 = semctl(id,0,GETVAL,0)) <0)
{
perror("semctl create GETVAL");
return -1;
}
else
{
if (sem_value != sem_value1 )
return -1;
else
goto again;
}
}
return -1;
}
return 1;
}
Dernière édition par Frank2004; au 02.03.2008 11:06 PM.. |
| Bookmarks |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|