📄 ecpg-pthread-win32.h
字号:
/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/ecpg-pthread-win32.h,v 1.5 2007/11/15 21:14:45 momjian Exp $ *//* * pthread mapping macros for win32 native thread implementation */#ifndef _ECPG_PTHREAD_WIN32_H#define _ECPG_PTHREAD_WIN32_H#ifdef ENABLE_THREAD_SAFETY#ifndef WIN32#include <pthread.h>#elsetypedef struct pthread_mutex_t{ HANDLE handle; LONG initlock;} pthread_mutex_t;typedef DWORD pthread_key_t;typedef bool pthread_once_t;#define PTHREAD_MUTEX_INITIALIZER { NULL, 0 }#define PTHREAD_ONCE_INIT falsevoid win32_pthread_mutex(volatile pthread_mutex_t *mutex);void win32_pthread_once(volatile pthread_once_t *once, void (*fn) (void));#define pthread_mutex_lock(mutex) \ do { \ if ((mutex)->handle == NULL) \ win32_pthread_mutex((mutex)); \ WaitForSingleObject((mutex)->handle, INFINITE); \ } while(0)#define pthread_mutex_unlock(mutex) \ ReleaseMutex((mutex)->handle)#define pthread_getspecific(key) \ TlsGetValue((key))#define pthread_setspecific(key, value) \ TlsSetValue((key), (value))/* FIXME: destructor is never called in Win32. */#define pthread_key_create(key, destructor) \ do { *(key) = TlsAlloc(); ((void)(destructor)); } while(0)#define pthread_once(once, fn) \ do { \ if (!*(once)) \ win32_pthread_once((once), (fn)); \ } while(0)#endif /* WIN32 */#endif /* ENABLE_THREAD_SAFETY */#endif /* _ECPG_PTHREAD_WIN32_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -