[contribution] C11 threads implementation for Unix and Windows environments
ltpmouse ltpmouse
ltpmouse@gmail.com
Mon Feb 20 02:18:00 GMT 2017
On 2017/2/20 6:59, Gkn Knc wrote:
> I am actually working on C11 threads implementation for Unix and
> Windows environments, and I would like to know if the GCC community
> could be interested.
The C library isn't part of gcc, so I am afraid this isn't the right
place for implementation of it. libc or mingw-w64 whatsoever seems more
appropriate.
GCC's threading support is based on another abstraction layer. See
comments in `gthr.h`.
> This is the github repository for my implementation :
> https://github.com/eau-de-la-seine/c-standard-threads
A quick view of the source code discovers a few problems:
1. Please use reserved identifiers for implementation-specific macros
or entities, so you don't get compiler errors due to name conflict
with user-defined macros.
2. #include'ing windows.h in a header is almost always a bad idea.
If you want `HANDLE`, for example, use `void *`.
3. CC-BY-NC-ND is overstrict. Consider removing NC.
4. The prototype of C11 thread procedure [`int (void *)`] is
incompatible with that of pthread [`void *(void *)`] and WinAPI
[`unsigned long __stdcall (void *)`]. Casting a C11 one then passing
the result to `pthread_create()` or `CreateThread()` is certainly
undefined behavior.
5. On x86 Windows, the stack pointer of a thread created by
`CreateThread()` isn't aligned to a 16-byte boundary, but today
GCC assumes it is. This could result in segment faults once SSE is
enabled on x86. Please use `_beginthreadex()` instead.
6. The Windows mutex objects are quite heavyweight for in-process
synchronization. You probably need to write a user-space one
yourself or use the native CRITICAL_SECTION.
7. Condition variables are left unimplemented.
> I have implemented almost all the thrd_ and mtx_ functions (I need to
> do more tests), only those two following functions are not implemented
> yet : thrd_sleep and mtx_timed_lock (they are time related).
You haven't implemented condition variables and once initialization
either, which makes a thread library almost unusable.
> I would be glad to contribute. Best regards,
Good luck.
--
Best regards,
ltpmouse
More information about the Gcc
mailing list