X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=tests%2Fthread-id.h;fp=tests%2Fthread-id.h;h=9378edcf2ce9246f12f0260eaf294ad2de1ceaf2;hb=550265b2c2de28e0fe566f71fb1cab64fa620efa;hp=0000000000000000000000000000000000000000;hpb=a39bde3b86162601c7d670d97a962fc3f029fdbd;p=urcu.git diff --git a/tests/thread-id.h b/tests/thread-id.h new file mode 100644 index 0000000..9378edc --- /dev/null +++ b/tests/thread-id.h @@ -0,0 +1,55 @@ +#ifndef _TEST_THREAD_ID_H +#define _TEST_THREAD_ID_H + +/* + * thread-id.h + * + * Userspace RCU library - thread ID + * + * Copyright 2013 - Mathieu Desnoyers + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + */ + +#ifdef __linux__ +# include + +# if defined(_syscall0) +_syscall0(pid_t, gettid) +# elif defined(__NR_gettid) +static inline pid_t gettid(void) +{ + return syscall(__NR_gettid); +} +# endif + +static inline +unsigned long urcu_get_thread_id(void) +{ + return (unsigned long) gettid(); +} +#elif defined(__FreeBSD__) +# include + +static inline +unsigned long urcu_get_thread_id(void) +{ + return (unsigned long) pthread_getthreadid_np(); +} +#else +# warning "use pid as thread ID" +static inline +unsigned long urcu_get_thread_id(void) +{ + return (unsigned long) getpid(); +} +#endif + +#endif /* _TEST_THREAD_ID_H */