Without realizing what I was getting myself into, I wrote some code using C11's threads.h (EDIT: every time I use the angle brackets < and > they just get eaten, even in the code snippet block.) I'm realizing after the fact that this is basically only supported on Linux (gcc/clang). This is my target platform, but I guess if I could cross compile to Windows or macOS that would be nice, too.

C's threads nominally appear to be a great feature. Finally, a standardized and straightforward interface to threads that would be cross-platform compatible. The reality appears to be anything but.

So is it worth just replacing that code with pthreads? Is there some near-term development on C threads that might make this worthwhile to use? I'm kind of surprised it hasn't really caught on some 12 years after the standard was introduced.

  • kevincox@lemmy.ml
    link
    fedilink
    arrow-up
    5
    ·
    1 year ago

    pthreads is fine and widely supported. I would probably recommend that interface for now. Maybe after 5 years or so when all of the LTS systems support the new standard that will be the better option, but all major OSes are POSIX compatible so no need for a new standard anyways.

    Also if you want to take advantage of any OS-specific extensions they are probably supported by pthreads, but the new C threads API will probably lag.

  • Sonotsugipaa@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    1 year ago

    As far as I know, C's threads.h implementation (or std::thread for C++) is based on POSIX threads.

    If you're using CMake or a similar build system that can define macros when building from Windows, then one option you have is to simply create an interface of sorts.
    Something like:

    // angle brackes work for this codeblock? idk
    
    #ifdef PLATFORM_WIN32
       // The syntax MSVC wants (which I'm not familiar with)
       #include "fuckmissingbracketsidontrememberwhatiwrotehere"
       thread_t win32_create_thread( /* ... */ ) {
          /* ... */
       }
    #else
       // The syntax sensible compilers want (which I'm also unfamiliar with because I forgor U+1F480)
       #include "fuckmissingbracketsidontrememberwhatiwrotehere"
       int thrd_create( /* ... */ ) {
          /* ... */
       }
    #endif
    

    It may be a bit tedious, but I don't know if there is some widely known C equivalent to the Boost library, at least for threads.