> Is this set in stone, or is it foreseen to change it to a more liberal 
> licence?
The choice of that license was an ... accident. XD XD XD
Since the library is expected to be linked dynamically it shouldn't matter 
much. If you consider it problematic, please let me know.

> Another question is: is it still possible to use pthreads (via winpthreads)
> if gcc is configured with --enable-threads=mcf?
I don't think pthread_*() functions would break, but they will not work with 
threads created with thrd_create() or std::thread() which would not be created 
via pthread_create(), apparently.
Certain construction of GCC and GCC libraries, for example, `__thread`, the C11 
`_Thread_local`, the C++11 `thread_local` and the C++ exception handler, 
requires a gthread library to work (this is usually done with a header that 
redirects __gthread calls to other libraries such as winpthread or the 
gthr-win32 one in libgcc). 

> and finally: is it really necessary to rely on "undocumented NT system
> calls for efficiency reasons"?
All efforts have been made to make **little cost** mutexes and condition 
variables - they consume no system resources except the bytes where they reside 
in.
It isn't necessary, only if we drop WIndows 7 support, because Microsoft has 
plagiarized the Linux futex APIs somehow: 
https://msdn.microsoft.com/en-us/library/windows/desktop/hh706898(v=vs.85).aspx 
(Note that these APIs are available only since Windows 8.)
Windows 7 has the awesome SRW locks and condition variables, which, as usual, 
are over-specific for Microsoft people's own usage. Their SRW locks do not 
support timed waits and their condition variables do not support any mutexes 
other than SRW locks and critical sections.
The keyed event APIs (http://locklessinc.com/articles/keyed_events/) are 
undocumented but turn out to be much powerful. If Microsoft people haven't 
implemented timed mutexes or generic condition variables, then it is we that 
should implement them.

------------------                               
Best regards,
lh_mouse
2016-06-20

-------------------------------------------------------------
发件人:Carl Kleffner <[email protected]>
发送日期:2016-06-20 19:29
收件人:mingw-w64-public
抄送:
主题:Re: [Mingw-w64-public] Proposal for a C11 header and announcement
 of mcfgthread,
 a library that implements efficient C11 and C++11 thread support without
 using winpthread

Hi,

most of the mcfgthread code is LGPL licenced (MCFLicense.txt
<https://github.com/lhmouse/mcfgthread/blob/master/MCFLicense.txt>). Is
this set in stone, or is it foreseen to change it to a more liberal licence?

Another question is: is it still possible to use pthreads (via winpthreads)
if gcc is configured with --enable-threads=mcf?

and finally: is it really necessary to rely on "undocumented NT system
calls for efficiency reasons"?

Just a few points that come into my mind after a quick scan of your
repository. The idea to overcome the schism of mingw-w64 thread
configurations is really great.

Regards

Carl


2016-06-18 21:10 GMT+02:00 lh mouse <[email protected]>:

> Hello everyone,
>
> It is with great honor that I bring you the C11-conforming header for
> thread support of mcfgthread, c11thread.h:
> https://github.com/lhmouse/mcfgthread/blob/master/src/env/c11thread.h
> All headers in the mcfgthread project have been put into the public domain.
>
> As JonY suggested a few days ago, it would be nice for mingw-w64 to have
> C11 thread support.
> This announcement is not only a call for testers, but also a proposal for
> a C11 header for mingw-w64. We can have both C11 and C++11 threads from
> today.
>
> The following code illustrates how to use C11 threads:
> ```
> E:\Desktop>expand -t4 test.c
> #include <mcfgthread/c11thread.h>
> #include <stdio.h>
> #include <stdlib.h>
>
> int thread_proc(void *param){
>     printf("thread running: tid = %u, param = %p\n",
> (unsigned)thrd_current(), param);
>     for(int i = 0; i < 5; ++i){
>         printf("thread going to sleep for one second...\n");
>         struct timespec ts;
>         ts.tv_sec = 1;
>         ts.tv_nsec = 0;
>         thrd_sleep(&ts, 0);
>     }
>     int exit_code = 67890;
>     printf("thread exiting: exit_code = %d\n", exit_code);
>     return exit_code;
> }
>
> int main(){
>     thrd_t tid;
>     int err;
>     if((err = thrd_create(&tid, &thread_proc, (void *)0x12345)) !=
> thrd_success){
>         printf("thrd_create() returned %d\n", err);
>         abort();
>     }
>     printf("created thread: tid = %u\n", (unsigned)tid);
>     int exit_code;
>     if((err = thrd_join(tid, &exit_code)) != thrd_success){
>         printf("thrd_join() returned %d\n", err);
>         abort();
>     }
>     printf("joined thread: exit_code = %d\n", exit_code);
> }
>
> E:\Desktop>gcc test.c -std=c11 -Wall -Wextra -pedantic -lmcfgthread
>
> E:\Desktop>a.exe
> created thread: tid = 9876
> thread running: tid = 9876, param = 00012345
> thread going to sleep for one second...
> thread going to sleep for one second...
> thread going to sleep for one second...
> thread going to sleep for one second...
> thread going to sleep for one second...
> thread exiting: exit_code = 67890
> joined thread: exit_code = 67890
>
> E:\Desktop>
> ```
>
> In order to use C++11 std::thread (as well as std::mutex,
> std::condition_variable, etc) you must rebuild GCC and its libraries.
> A few instructions can be found here:
> https://github.com/lhmouse/mcfgthread/wiki
>
>
> --------------
> Best regards,
> lh_mouse
> 2016-06-19
>
>
>
> ------------------------------------------------------------------------------
> What NetFlow Analyzer can do for you? Monitors network bandwidth and
> traffic
> patterns at an interface-level. Reveals which users, apps, and protocols
> are
> consuming the most bandwidth. Provides multi-vendor support for NetFlow,
> J-Flow, sFlow and other flows. Make informed decisions using capacity
> planning
> reports. http://sdm.link/zohomanageengine
> _______________________________________________
> Mingw-w64-public mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
>
------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports. http://sdm.link/zohomanageengine
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public



------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports. http://sdm.link/zohomanageengine
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to