thread_private.h revision f2cea021ab2c6d7d7feeb40cca098aa132605876
11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* $OpenBSD: thread_private.h,v 1.18 2006/02/22 07:16:31 otto Exp $ */ 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* PUBLIC DOMAIN: No Rights Reserved. Marco S Hyman <marc@snafu.org> */ 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _THREAD_PRIVATE_H_ 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _THREAD_PRIVATE_H_ 71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <pthread.h> 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * This file defines the thread library interface to libc. Thread 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * libraries must implement the functions described here for proper 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * inter-operation with libc. libc contains weak versions of the 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * described functions for operation in a non-threaded environment. 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * helper macro to make unique names in the thread namespace 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define __THREAD_NAME(name) __CONCAT(_thread_tagname_,name) 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct __thread_private_tag_t { 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project pthread_mutex_t _private_lock; 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project pthread_key_t _private_key; 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}; 261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _THREAD_PRIVATE_MUTEX(name) \ 281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project static struct __thread_private_tag_t __THREAD_NAME(name) = { PTHREAD_MUTEX_INITIALIZER, -1 } 291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _THREAD_PRIVATE_MUTEX_LOCK(name) \ 301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project pthread_mutex_lock( &__THREAD_NAME(name)._private_lock ) 311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _THREAD_PRIVATE_MUTEX_UNLOCK(name) \ 321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project pthread_mutex_unlock( &__THREAD_NAME(name)._private_lock ) 331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid _thread_atexit_lock(void); 351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid _thread_atexit_unlock(void); 361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 37f2cea021ab2c6d7d7feeb40cca098aa132605876Elliott Hughes#define _ATEXIT_LOCK() _thread_atexit_lock() 38f2cea021ab2c6d7d7feeb40cca098aa132605876Elliott Hughes#define _ATEXIT_UNLOCK() _thread_atexit_unlock() 391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* _THREAD_PRIVATE_H_ */ 41