On 02/07/19 12:15 +0200, Jacek Caban wrote:
On 02/07/2019 12:12, Jacek Caban wrote:
On 02/07/2019 11:57, Liu Hao wrote:
在 2019/7/2 下午5:19, Eric Botcazou 写道:
It seems inappropriate to use handles as thread identifiers
(as handles
imply resource ownership and are not unique identifiers);
thread IDs (as
`DWORD` or `unsigned long`) would be a better alternative.
This was considered but ultimately rejected, as you can do
nothing with a
thread Id, i.e. you need a handle for everything. But the
__gthread_equal
routine does compare the Ids and not the handles.
The `OpenThread()` function can obtain a handle by thread ID. It returns
a real handle that has to be closed when it is out of use. Using the
pseudo handle returned by `GetCurrentThread()` may be more efficient if
the target thread ID is equal to `GetCurrentThreadId()`.
The problem with thread id is that it's not valid nor guaranteed to
be identical after the thread is terminated. A handle needs to be
used for that.
I meant unique, not identical.
The C++ standard says:
"The library may reuse the value of a thread::id of a terminated
thread that can no longer be joined."
So that's not a reason to use a handle.