[Mesa-dev] [PATCH 1/2] c11/threads: implement thrd_current on Windows

Jose Fonseca jfonseca at vmware.com
Mon Apr 24 11:56:49 UTC 2017


On 24/04/17 12:26, Emil Velikov wrote:
> On 21 April 2017 at 16:45, Jose Fonseca <jfonseca at vmware.com> wrote:
>> I reread http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf and is
>> not explicit.
>>
>> But I checked C11 threads.h implementation and thrd_current also uses
>> DuplicateHandle.
>>
>> So C11/threads_win32.h is correct.  And ISO C11 standard commited screwed up
>> here.  Maybe they'll introduce thread ids  at some point (MSVC's
>> implementation has a non-standard _Thrd_id() function), and we can use it,
>> but until then, it's better not pretend that thrd_current meets our needs
>> because it doesn't.
>>
> Right, thanks for the clarification Jose!
>
> Personally I won't go as far as "ISO C11 standard commited screwed up
> here", since they are not the ones that wrote the threads
> implementation in Windows.
 >
 > Perhaps MS can address that if they see enough value in it, but even
 > then there's the older/released versions of Windows to think about.

No my point is that it's *impossible* for Microsoft, us, or anybody to 
do a C11 threads where thrd_current is light weight on Windows.  Period. 
  So that shows a lack of foresight from the committee.

Or perhaps the committee decided that a light weight thrd_current was 
unimportant.  But in that case I think it was a mistake.

Anyway, I'm sure there might have been other tradeoffs and issues that 
lead the committe to come to this, or merely lack of time, or they 
willingly decided to get feet wet before dived in.  All I mean is that 
at least for our use case, the current C threads.h design does not fit 
our needs, at least on Windows.

> That aside - can we reword the comment to something like the following:
>
>
>    /* GetCurrentThread() returns a pseudo-handle, which we need
>     * to pass to DuplicateHandle. Only the resulting handle can be used
>     * from other threads.
>     *
>     * Note that neither handle can be compared to the one by thread_create.
>     * Only the thread IDs - as returned by GetThreadId and GetCurrentThreadId
>     * can be compared directly.
>     *
>     * Other potential solutions would be:
>     * - define thrd_t as a thread Ids, but this would mean we'd need
> to OpenThread for many operations
>     * - use malloc'ed memory for thrd_t. This would imply using TLS
> for current thread.
>     *
>     * Neither is particularly nice.
>     */
>
>
> Thanks
> Emil
>

Looks good.

Though the existing

    "Life would be much easier if C11 threads had different abstractions for
    threads and thread IDs, just like C++11 threads does..."

paragraph could stay.  I'm still hoping that one day C standard has 
distinct types for threads and thread ids is, as the only way for this 
to be resolved to everybody's satisfaction.


Jose




More information about the mesa-dev mailing list