mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-36084: Add native thread ID (TID) to threading.Thread (GH-13463)
Add native thread ID (TID) to threading.Thread objects (supported platforms: Windows, FreeBSD, Linux, macOS).
This commit is contained in:
parent
b3be407288
commit
b121f63155
9 changed files with 154 additions and 0 deletions
|
@ -143,6 +143,10 @@ LeaveNonRecursiveMutex(PNRMUTEX mutex)
|
|||
|
||||
unsigned long PyThread_get_thread_ident(void);
|
||||
|
||||
#ifdef PY_HAVE_THREAD_NATIVE_ID
|
||||
unsigned long PyThread_get_thread_native_id(void);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Initialization of the C package, should not be needed.
|
||||
*/
|
||||
|
@ -227,6 +231,25 @@ PyThread_get_thread_ident(void)
|
|||
return GetCurrentThreadId();
|
||||
}
|
||||
|
||||
#ifdef PY_HAVE_THREAD_NATIVE_ID
|
||||
/*
|
||||
* Return the native Thread ID (TID) of the calling thread.
|
||||
* The native ID of a thread is valid and guaranteed to be unique system-wide
|
||||
* from the time the thread is created until the thread has been terminated.
|
||||
*/
|
||||
unsigned long
|
||||
PyThread_get_thread_native_id(void)
|
||||
{
|
||||
if (!initialized) {
|
||||
PyThread_init_thread();
|
||||
}
|
||||
|
||||
DWORD native_id;
|
||||
native_id = GetCurrentThreadId();
|
||||
return (unsigned long) native_id;
|
||||
}
|
||||
#endif
|
||||
|
||||
void _Py_NO_RETURN
|
||||
PyThread_exit_thread(void)
|
||||
{
|
||||
|
|
|
@ -12,6 +12,12 @@
|
|||
#endif
|
||||
#include <signal.h>
|
||||
|
||||
#if defined(__linux__)
|
||||
# include <sys/syscall.h> /* syscall(SYS_gettid) */
|
||||
#elif defined(__FreeBSD__)
|
||||
# include <pthread_np.h> /* pthread_getthreadid_np() */
|
||||
#endif
|
||||
|
||||
/* The POSIX spec requires that use of pthread_attr_setstacksize
|
||||
be conditional on _POSIX_THREAD_ATTR_STACKSIZE being defined. */
|
||||
#ifdef _POSIX_THREAD_ATTR_STACKSIZE
|
||||
|
@ -302,6 +308,26 @@ PyThread_get_thread_ident(void)
|
|||
return (unsigned long) threadid;
|
||||
}
|
||||
|
||||
#ifdef PY_HAVE_THREAD_NATIVE_ID
|
||||
unsigned long
|
||||
PyThread_get_thread_native_id(void)
|
||||
{
|
||||
if (!initialized)
|
||||
PyThread_init_thread();
|
||||
#ifdef __APPLE__
|
||||
uint64_t native_id;
|
||||
(void) pthread_threadid_np(NULL, &native_id);
|
||||
#elif defined(__linux__)
|
||||
pid_t native_id;
|
||||
native_id = syscall(SYS_gettid);
|
||||
#elif defined(__FreeBSD__)
|
||||
int native_id;
|
||||
native_id = pthread_getthreadid_np();
|
||||
#endif
|
||||
return (unsigned long) native_id;
|
||||
}
|
||||
#endif
|
||||
|
||||
void _Py_NO_RETURN
|
||||
PyThread_exit_thread(void)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue