  613

pthread_mutex_lock (&semap->lock) ;

while (semap->count == 0)

pthread_cond_wait (&semap->nonzero, &semap->lock) ;

semap->count--;

pthread_mutex_unlock (&semap->lock) ;

}

void

semaphore_close (semaphore_t *semap)

{

munmap ((void *) semap, sizeof (semaphore_t));

}

      , 
    /tmp/semaphore,      -
.     ,    
    ,   ,   
  .

/* create. */

#include "pthread.h"

#include "sem.h"

int

main()
{

semaphore_t *semap;

semap = semaphore_create("/tmp/semaphore");

if (semap == NULL)
exit(l) ;

semaphore_close (semap) ;

return (0) ;

}

/* post */

#include "pthread.h"

#include "sem.h"

int

main()
{

semaphore_t *semap;

semap = semaphore_open ("/tmp/semaphore");

if (semap == NULL)
exit (1);

semaphore_post (semap);

semaphore_close (semap);

return (0) ;

}

/* wait */
#include "pthread.h"