27 static pthread_mutex_t mutex_initial = PTHREAD_MUTEX_INITIALIZER;
29 memcpy ( *mutex_p, &mutex_initial,
sizeof ( mutex_initial ) );
30 pthread_mutexattr_t attr;
31 pthread_mutexattr_init ( &attr );
32 pthread_mutexattr_setpshared ( &attr, PTHREAD_PROCESS_SHARED );
33 return pthread_mutex_init ( *mutex_p, &attr );
46 static pthread_cond_t cond_initial = PTHREAD_COND_INITIALIZER;
48 memcpy ( *cond_p, &cond_initial,
sizeof ( cond_initial ) );
49 pthread_condattr_t attr;
50 pthread_condattr_init ( &attr );
51 pthread_condattr_setpshared ( &attr, PTHREAD_PROCESS_SHARED );
52 return pthread_cond_init ( *cond_p, &attr );
65 struct timespec abs_time;
67 if ( clock_gettime ( CLOCK_REALTIME, &abs_time ) )
70 abs_time.tv_sec += tv_sec;
71 abs_time.tv_nsec += tv_nsec;
73 if ( abs_time.tv_nsec > 1000 * 1000 * 1000 ) {
75 abs_time.tv_nsec -= 1000 * 1000 * 1000;
78 return pthread_mutex_timedlock ( mutex_p, &abs_time );