threads.h
来自「Android 一些工具」· C头文件 代码 · 共 147 行
H
147 行
/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */#ifndef _LIBS_CUTILS_THREADS_H#define _LIBS_CUTILS_THREADS_H#ifdef __cplusplusextern "C" {#endif/***********************************************************************//***********************************************************************//***** *****//***** local thread storage *****//***** *****//***********************************************************************//***********************************************************************/#ifdef HAVE_PTHREADS#include <pthread.h>typedef struct { pthread_mutex_t lock; int has_tls; pthread_key_t tls;} thread_store_t;#define THREAD_STORE_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, 0, 0 }#elif defined HAVE_WIN32_THREADS#include <windows.h>typedef struct { int lock_init; int has_tls; DWORD tls; CRITICAL_SECTION lock;} thread_store_t;#define THREAD_STORE_INITIALIZER { 0, 0, 0, {0, 0, 0, 0, 0, 0} }#else# error "no thread_store_t implementation for your platform !!"#endiftypedef void (*thread_store_destruct_t)(void* value);extern void* thread_store_get(thread_store_t* store);extern void thread_store_set(thread_store_t* store, void* value, thread_store_destruct_t destroy);/***********************************************************************//***********************************************************************//***** *****//***** mutexes *****//***** *****//***********************************************************************//***********************************************************************/#ifdef HAVE_PTHREADStypedef pthread_mutex_t mutex_t;#define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZERstatic __inline__ void mutex_lock(mutex_t* lock){ pthread_mutex_lock(lock);}static __inline__ void mutex_unlock(mutex_t* lock){ pthread_mutex_unlock(lock);}static __inline__ int mutex_init(mutex_t* lock){ return pthread_mutex_init(lock, NULL);}static __inline__ void mutex_destroy(mutex_t* lock){ pthread_mutex_destroy(lock);}#endif#ifdef HAVE_WIN32_THREADStypedef struct { int init; CRITICAL_SECTION lock[1];} mutex_t;#define MUTEX_INITIALIZER { 0, {{ NULL, 0, 0, NULL, NULL, 0 }} }static __inline__ void mutex_lock(mutex_t* lock){ if (!lock->init) { lock->init = 1; InitializeCriticalSection( lock->lock ); lock->init = 2; } else while (lock->init != 2) Sleep(10); EnterCriticalSection(lock->lock);}static __inline__ void mutex_unlock(mutex_t* lock){ LeaveCriticalSection(lock->lock);}static __inline__ int mutex_init(mutex_t* lock){ InitializeCriticalSection(lock->lock); lock->init = 2; return 0;}static __inline__ void mutex_destroy(mutex_t* lock){ if (lock->init) { lock->init = 0; DeleteCriticalSection(lock->lock); }}#endif#ifdef __cplusplus}#endif#endif /* _LIBS_CUTILS_THREADS_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?