【发布时间】:2015-11-23 11:21:34
【问题描述】:
我们可以通过在main函数的开头调用std::this_thread::get_id()来获取主线程的id,比如this answer suggests。然后我们可以将这个id 存储在一个全局变量中,并与std::this_thread::get_id() 的调用进行比较。
但是,这迫使我们更改main 函数。有没有办法创建一个这样做的 library 函数?我正在考虑使用用std::this_thread::get_id() 表达式初始化的全局变量。由于全局变量(具有静态持续时间的变量)相对较早地初始化,因此不太可能(但并非不可能,请参阅:deferred dynamic initialization)在这些变量初始化之前产生线程。
我还可以使用一个辅助函数初始化全局变量,该函数枚举所有线程并选择创建时间最早的线程(基于this answer)。
我对多线程非常陌生,因此非常欢迎任何建议或指导。
【问题讨论】:
-
为什么?它对运行任何特定函数调用的线程有什么影响?
-
这样做的目的是什么?在您的代码中,您应该知道是否在主线程上调用了函数,就这么简单。 :)
-
@DanielSanchez 有时它对完整性检查很有用,例如如果您正在设计一个通用库,例如,要知道哪个线程将调用一个函数,这并不总是那么容易。在这种情况下,库将与任何特定线程分离,并且它的函数可能会被任何线程调用。
-
在 Windows 中,进程可以比主线程寿命更长并产生更多线程。 blogs.msdn.com/b/oldnewthing/archive/2010/08/27/10054832.aspx 如果您的库在主线程终止后 由辅助线程加载怎么办?
-
如果您解释您正在尝试解决的实际问题,而不是寻求帮助实施您选择的解决方案,您将获得更好的答案。
标签: c++ multithreading c++11