How to launch a thread in Windows versus POSIX

This is the simplest code I can think of to show launching a thread in windows - you can use the C sandbox.

#include <stdio.h> #include <windows.h> DWORD ThreadProc(void* pObject){ printf("Hello thread %li\n", (long)pObject); return 0; } int main(){ DWORD ThreadId; HANDLE ThreadHandle = CreateThread(NULL,0,&ThreadProc,(void*)111, 0, &ThreadId); printf("Hello world of C!\n"); Sleep(1); return 0; }

Without the sleep call the program can exit before we have a change to run the thread. This is what we see when we run it:

C:\Users\eliotmuir\scratch\core\sandbox_c>test Hello world of C! Hello thread 111

This is what the same code looks like with pthreads (the name of the POSIX threads):

#include <stdio.h> #include <pthread.h> void* ThreadProc(void* pObject){ printf("Hello thread %li\n", (long)pObject); return 0; } int main(){ printf("Hello world of C!\n"); pthread_t Thread; int Result = pthread_create(&Thread, NULL, &ThreadProc, (void*)111); pthread_detach(Thread); return 0; }

With POSIX threads one would need to call pthread_join to clean up thread thread when it is done if we didn’t call pthread_detach. I think this is really what I would see as unnecessary flexibility in the pthread library - at least based on my experience of how the applications I have architected end up using threads.

Â