| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #ifndef HV_THREAD_LOCAL_STORAGE_H_
- #define HV_THREAD_LOCAL_STORAGE_H_
- #include "hexport.h"
- #include "hplatform.h"
- #ifdef OS_WIN
- #define hthread_key_t DWORD
- #define INVALID_HTHREAD_KEY 0xFFFFFFFF
- #define hthread_key_create(pkey) *pkey = TlsAlloc()
- #define hthread_key_delete TlsFree
- #define hthread_get_value TlsGetValue
- #define hthread_set_value TlsSetValue
- #else
- #define hthread_key_t pthread_key_t
- #define INVALID_HTHREAD_KEY 0xFFFFFFFF
- #define hthread_key_create(pkey) pthread_key_create(pkey, NULL)
- #define hthread_key_delete pthread_key_delete
- #define hthread_get_value pthread_getspecific
- #define hthread_set_value pthread_setspecific
- #endif
- #ifdef __cplusplus
- class HV_EXPORT ThreadLocalStorage {
- public:
- enum {
- THREAD_NAME = 0,
- EVENT_LOOP = 1,
- MAX_NUM = 16,
- };
- ThreadLocalStorage() {
- hthread_key_create(&key);
- }
- ~ThreadLocalStorage() {
- hthread_key_delete(key);
- }
- void set(void* val) {
- hthread_set_value(key, val);
- }
- void* get() {
- return hthread_get_value(key);
- }
- static void set(int idx, void* val) {
- return tls[idx].set(val);
- }
- static void* get(int idx) {
- return tls[idx].get();
- }
- static void setThreadName(const char* name) {
- set(THREAD_NAME, (void*)name);
- }
- static const char* threadName();
- private:
- hthread_key_t key;
- static ThreadLocalStorage tls[MAX_NUM];
- };
- #endif
- #endif // HV_THREAD_LOCAL_STORAGE_H_
|