如何立即暂停一个线程?

-1 c++ multithreading c++17 conditional-variable

假设有两个线程,其中一个线程具有更高的优先级,并且它们在同一核心(单核)上运行,我只想同时只工作一个线程。(也许你说这不是线程范例,但实际上我只是做了我的这里问题最小)

T1 ~~~e1~e2~e3~e4~...~~~~~~~eK~~~~~~~~...~~~ eN~~~~~ ///(e1...eN)packed as a task.
                |            |
T2 ~~~~~~~~~~~~pause~~~~~~continue~~~~~~~~~~~~~~~~~~ ///(pause & continue)is just title time for T1 that T2 is operating (T2 has more priority).
Run Code Online (Sandbox Code Playgroud)

**~**是 time ,并且**e**是在那里求值的表达式。整个 e1、e2、... 是一个函数,即 api 调用函数(任务),所以我只想在那里暂停 T1(~pause~)并运行我的 T2 直到完成,完成后继续 T1。

注意:我无法更换**e**工作(职能)。

我知道的?

创建条件变量(CV)并在完成时T2通知CV唤醒,但这不是我的成就,因为我想让T1立即在e4 暂停时间)中精确暂停并继续T2直到完成(或我的继续时间)。

我的知识与: https: //en.cppreference.com/w/cpp/thread/condition_variable#Example 我们是否有立即暂停的 thread::方法(强制上下文切换)?(我不是说屈服!)

Seb*_*edl 7

C++ 没有办法促进这样的事情。您对线程没有这种级别的控制。

在操作系统级别,这就是线程优先级的用途。准备就绪的高优先级线程应始终先于低优先级线程进行调度。因此,您可以使用操作系统 API 来更改线程的线程优先级,并且应该获得大致正确的结果 - 但请注意,这是近似值,因为您无法保证操作系统会立即触发 T2 准备就绪时的任务切换。

总的来说,整个事情听起来像是一个 XY 问题,如果你能看到根本问题并思考更好的解决方法,效果会更好。