  597

       , , -
        .

      

       
   ,    
,     ,   -
 .  ,     -
.      -,    
       -
.      .

      foo ()
   .

static pthread_once_t foo_once = PTHREAD_ONCE_INIT;

static pthread_mutex_t foo_mutex;

void foo_init ()
{

pthread_mutex_init (&foo_mutex, NULL) ;

}

void foo()

{

pthread_once (&foo_once, foo_init) ;

pthread_mutex_lock (&foo_mutex) ;

/*  . */

pthread_mutex_unlock (S:foo_mutex) ;

}

       
foo ()      .

static pthread_mutex_t foo_mutex = PTHREAD_MUTEX_INITIALIZER;

void foo()
{

pthread_mutex_lock(&foo_mutex) ;

/*  . */

pthread_mutex_unlock(&foo_mutex) ;

}

   ,     -
  ,    pthread_once (),   -
  &foo_mutex,   pthread_mutex_lock () 
pthread_mutex_unlock().

 , -,     ,
          ,  
 ()      .

         , 
,      .  
    , ,     
     .      
  ,  pthread_mutex_lock ()  
,         .  
,  pthread_mutex_lock (),    ,  