Thread (290 messages) 290 messages, 13 authors, 2022-04-12

Re: [dpdk-dev] [PATCH v6 01/10] eal: add thread id and simple thread functions

flat view

From: Narcisa Ana Maria Vasile <hidden>
Date: 2021-04-30 06:37:17

On Thu, Apr 29, 2021 at 07:28:26PM +0300, Dmitry Kozlyuk wrote:
2021-04-29 13:05 (UTC+0100), Kinsella, Ray:
quoted
On 29/04/2021 08:44, Thomas Monjalon wrote:
quoted
29/04/2021 02:50, Dmitry Kozlyuk:  
quoted
2021-04-02 18:38 (UTC-0700), Narcisa Ana Maria Vasile:  
quoted
--- /dev/null
+++ b/lib/librte_eal/windows/include/rte_windows_thread_types.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2021 Microsoft Corporation
+ */
+
+#ifndef _RTE_THREAD_TYPES_H_
+#define _RTE_THREAD_TYPES_H_
+
+#include <rte_windows.h>
+
+typedef DWORD                       rte_thread_t;
+
+#endif /* _RTE_THREAD_TYPES_H_ */  
pthread_t type in pthreads-win32 and winpthread is not 32 bit.
DPDK will have different ABI depending on a threading backend used.
Apps must know it at build time then. How do they discover it?
This is worth a warning in commit log and docs.  
Not sure this is an acceptable behaviour.
In my opinion, ABI should not vary.
+Cc Ray
  
So pthread_t on Win32 should just map to the HANDLE datatype.
Which if memory serves is in fact a DWORD on Win32.
DWORD = uint32_t, HANDLE = void*, which are of different size on x64.
I suggest an opaque 64-bit value to fit pthread_t from MinGW's winpthread.
Only pthreads-win32 has a bigger pthread_t, but we don't have to support it.
quoted
So I suspect that pthreads indirection is probably be just providing a circuitous route to end up in the same place, a HANDLE

IMHO
To absolutely guarantee no ABI change, we ought to be passing back void * not rte_thread_t. 
Yes. Only I'd use a type-safe version:

	typedef struct rte_thread_tag {
		void *opaque; /* or uintptr_t per Tyler's suggestion */
	} rte_thread_t;
I agree we need a big enough value to fit different identifiers.
However, just to clarify, on Windows, there are two distinct thread-related identifiers:
thread id (DWORD) and thread HANDLE (void*).
In this API implementation I've used the rte_thread_t as the DWORD thread identifier, as the HANDLE
can be obtain from this DWORD using the OpenThread() function.
I will implement an opaque value that will be assigned the thread id (not the HANDLE) in this API.  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help