We can get the id of the main thread by calling std::this_thread::get_id()
just at the start of the main
function like this answer suggests. We can then store this id
in a global variable and compare against a call of std::this_thread::get_id()
.
However, this forces us to change the main
function. Is there a way to create a library function that does this? I was thinking about using a global variable initialized with std::this_thread::get_id()
expression. Since global variables (variables with static duration) are initialized relatively early it is unlikely (but not impossible, see: deferred dynamic initialization) that threads are spawned before these variables are initialized.
I could also initialize the global variable with a helper function which enumerates all threads and picks the one with the earliest creation time (based on this answer).
I am very new to multithreading so any advice or guidance is extremely welcome.
There is no such thing as main thread. There is a thread which was launched first, but all threads are first-class citizens. By tinkering with linker flags, I can easily create a program where the thread executing main()
would not be the the thread launched first.
Rethink your design.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With