/* * Create log info structure: */ LogInfo log_create( LOG_FLAGS flags, const char *file, const char *prefix, size_t buf_size ) { LogInfo log = Calloc( sizeof( struct _LogInfo ), 1 ); if( !log ) { return NULL; } log->ibuf_size = LOG_IBUF_MIN_SIZE; log->ibuf = Malloc( LOG_IBUF_MIN_SIZE + 1 ); if( !log->ibuf ) { Free( log ); return 0; } if( buf_size ) { log->buf_size = buf_size < LOG_BUF_MIN_SIZE ? LOG_BUF_MIN_SIZE : buf_size; log->buf = Malloc( log->buf_size ); if( !log->buf ) { Free( log->ibuf ); Free( log ); return NULL; } } log->prefix = ( prefix ? ( *prefix ? Strdup( prefix ) : NULL ) : Strdup( LOG_DEFAULT_PREFIX ) ); if( ( ( prefix && *prefix ) || !prefix ) && !log->prefix ) { Free( log->ibuf ); Free( log->buf ); Free( log ); return NULL; } if( file ) { log->file = Strdup( file ); if( !log->file ) { Free( log->ibuf ); Free( log->prefix ); Free( log->buf ); Free( log ); return NULL; } } log->flags = flags; log->timefunc = ( flags & LOG_USE_GMTIME ) ? gmtime : localtime; __initlock( log->lock ); return log; }
int main() { pthread_t thread[NB_THREAD]; int thread_id[NB_THREAD]; int i=0; __initlock(&global_lock); for (i=0; i<NB_THREAD ; i++) { thread_id[i] = i; pthread_create(&(thread[i]), NULL, thread_fct, &(thread_id[i])); } for (i=0; i<NB_THREAD ; i++) { pthread_join(thread[i], NULL); } printf("global_var: %d\n", global_var); return 0; }