174  4.  ++-   

}

void *taskX(void *X)
{

//    X.

incrementThreadAvailability()

re turn(NULL)
}

void *taskY(void *Y)
{

//    .

incrementThreadAvailability()

return(NULL)
}

void *taskZ(void *Z)
{

//    Z.

decrementThreadAvailability()

return(NULL)
}

//. . .

  4.5        -
  ,    .   
   (  ),     -
.        .  , 
       ,  -
  :

threadAvailability()
incrementThreadAvailability()
decrementThreadAvailability()

  4.6     .

//  4.6. ,   
//               

void incrementThreadAvai lability (void)
{

//. . .

pthread_mutex_lock(&Mutex)

AvailableThreads++

pthread_mutex_unlock(&Mutex)
}

void decrementThreadAvailability(void)

{

//. ..

pthread_mutex_lock(&Mutex)

AvailableThreads--

pthread_mutex_unlock(&Mutex)
}

int threadAvailability(void)
{

//. . .