タイトルは基本的にそれ自体を物語っています.5秒間スリープしてミューテックスのロックを解除した後、最終的にpthread_cond_waitから戻ります。pthread_cond_wait はミューテックスを取得できないことを知っているようで、ミューテックスのロックを解除した後、pthread_cond_wait がミューテックスを取得してから、待機します..そうですか?
#include <pthread.h>
pthread_mutex_t alarm_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t alarm_cond = PTHREAD_COND_INITIALIZER;
int s_i = 0;
void* alarm_thread ( void* arg )
{
pthread_mutex_lock ( &alarm_mutex );
while ( 1 )
{
while ( s_i == 1 )
{
pthread_cond_wait ( &alarm_cond, &alarm_mutex );
printf("I am here");
}
}
}
int main ( int argc, char* argv[] )
{
pthread_t thread;
pthread_create ( &thread, NULL, alarm_thread, NULL );
pthread_mutex_lock ( &alarm_mutex );
s_i = 1;
pthread_cond_broadcast ( &alarm_cond );
sleep ( 5 );
pthread_mutex_unlock ( &alarm_mutex );
}