The UNIX and Linux Forums  

Go Back   O UNIX e Linux Forum > Sistemas Operativos > HP-UX
.
google unix.com



HP-UX HP-UX (Hewlett Packard Unix) Hewlett-Packard é propriedade da aplicação do sistema operativo Unix, baseado no Sistema de V.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Evite duplicatas em um arquivo pssandeep UNIX para Dummies Perguntas & Respostas 7 03-26-2008 06:36
Awk: Como evitar o Sistema sandeep_hi Programação Shell Script e 0 06-23-2006 07:01
Como evitar historying meu comando ting123 UNIX para Dummies Perguntas & Respostas 2 05-06-2006 05:58
Evitar spam em pinho? a25khan UNIX para Dummies Perguntas & Respostas 1 12-13-2003 10:50
como fazer o bloqueio do teclado sem utilizar o comando Lock dianayun UNIX para Dummies Perguntas & Respostas 7 06-21-2002 07:05

 
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 02-03-2008
Frank2004 Frank2004 is offline
Usuário
  
 

Join Date: Jun 2004
Localização: Beijing, China
Lugares: 54
evitar semphore bloqueio

desenvolvemos um conjunto de sistema V semphore interface de nossa aplicação, em geral, todos os trabalhos normais, raramente causam o impasse. Aqui estão alguns importantes sem_wait e sem_post interface, pls alguma sugestão de ponto fixo o impasse problema:

Código:
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;

}


Última edição por Frank2004; em 02/03/2008 11:06..
 

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Desligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 08:23.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0