【发布时间】:2016-09-10 23:54:02
【问题描述】:
正如标题所说,在 c++ 中使用 std::threads 时,我们如何知道上下文切换何时发生
例如
void a()
{
//some code
}
void b();
{
//some code
}
int main ()
{
thread th1 (a);
thread th2 (b);
th1.join();
th2.join();
return 0;
}
有没有办法知道操作系统何时进行线程切换,我们实际上可以在相应的函数正在处理时描绘像打印 a 或 b。
注意:我使用了互斥锁和控制变量,在它们上面放置了一个简单的 cout
【问题讨论】:
-
你没有。这是操作系统的工作,知道何时切换线程上下文。而在现代的多 CPU 硬件上,甚至可能没有线程上下文切换,每个线程都分配了一个单独的 CPU,并且一切都同时运行。你想解决什么问题?不,不是关于知道何时存在线程上下文切换的问题,而是您认为解决方案是知道何时存在线程上下文切换。
-
@SamVarshavchik 我刚做了一个有两个线程的程序,想打印当前正在处理的进程
-
线程的关键在于它们是独立的指令流,因此线程不可能检测它们之间的上下文切换。显然,操作系统调度程序将管理/跟踪此类信息,但不会使切换对受影响的线程显而易见。如果您试图检测这样的事情,您可能需要对共享数据的访问进行某种同步(例如临界区、互斥体、使用原子变量),或者等待线程完成(例如加入)。
-
我确信有一个特定于操作系统的资源可以用来查看当前正在运行的线程。问题是,当您获得并设法打印它时,可能正在运行不同的线程。这完全没有任何作用。
标签: c++ multithreading