Syncronizing Threads
int i_init = 0;
pthread_mutex_t * i_mutex;
void i_init_routine()
{
if (i_init == 0) {
pthread_mutex_init(i_mutex, NULL);
i_init = 1;
}
}
We need to lock a mutex before checking i_init...
pthread_mutex_t * ii_mutex;
void ii_init_routine()
{
P_M_L(ii_mutex);
i_init_routine();
P_M_U(ii_mutex);
}
We need to initialize ii_mutex...
pthread_once_t once_control = PTHREAD_ONCE_INIT;
int pthread_once(pthread_once_t *, void (*init_routine)(void));
pthread_once_t i_init = PTHREAD_ONCE_INIT;
pthread_mutex_t * i_mutex;
void i_init_routine()
{
pthread_mutex_init(i_mutex, NULL);
}
void ii_init_routine()
{
pthread_once(&i_init, i_init_routine);
}