если вы генерируете мьютекс:
pthread_mutex MyMutex = PTHREAD_MUTEX_INIT;
Затем, чтобы остановить любую другую часть программы от изменения какого-либо ресурса, пока текущий поток изменяет / обращается к ресурсу:
pthread_mutex_lock( &MyMutex );
// modify or access resource here
pthread_mutex_unlock( &MyMutex );
Примечание: чтобы быть эффективным, все места в коде, которые обращаются к этому ресурсу, должны использовать один и тот же 'MyMutex'
относительно:
availableSeats = 2;
while(availableSeats > 0){noop;}
Рекомендуется между блокировкой мьютекса для того же ресурса, чтобы сделать небольшую паузу, пока она не заблокирована, чтобы позволить другому потоку какое-то время изменить значение 'availableSeats'. Например:
pthread_mutex SeatsFilled = PTHREAD_MUTEX_INIT;
...
pthread_mutex_lock( &SeatsFilled );
availableSeats = 2;
pthread_mutex_unlock( &SeatsFilled );
...
do
{
int numSeats;
pthread_mutex_lock( &SeatsFilled );
numSeats = availableSeats;
pthread_mutex_unlock( &SeatsFilled );
if( !numSeats )
{
nanosleep( 1000 );
}
} while( numSeats );
...