C++ 代码块和线程优先级

C++ 代码块和线程优先级,c++,C++,当我将代码放入块中时,如下所示: { f1(); f2(); } 它是否能保证CPU会依次调用这两个函数,而不管其他进程在运行什么 我问这个问题的原因是,在我的例子中,f1对操作系统做了一些事情,而f2则依赖于操作系统处于相同状态才能正常工作 如果不是,(我真的不这么认为),有没有C++的构造能帮助我做这样的事情? 此外,我还将提供一些关于我的真实代码中正在执行的操作的背景信息: f1()实际上是一个在win32系统上生成顶级窗口的函数。 f2()是一个

当我将代码放入块中时,如下所示:

    {
      f1();
      f2();
    }
它是否能保证CPU会依次调用这两个函数,而不管其他进程在运行什么

我问这个问题的原因是,在我的例子中,f1对操作系统做了一些事情,而f2则依赖于操作系统处于相同状态才能正常工作

如果不是,(我真的不这么认为),有没有C++的构造能帮助我做这样的事情? 此外,我还将提供一些关于我的真实代码中正在执行的操作的背景信息:

f1()实际上是一个在win32系统上生成顶级窗口的函数。 f2()是一个搜索最顶层窗口(不是任务栏)的函数。因此,我担心的是,我可能会遇到一个问题,即在f1完成和f2尚未执行之间的时间内,可能会创建其他顶级窗口,在这种情况下,f2将找到错误的窗口

它是否能保证CPU会依次调用这两个函数,而不管其他进程在运行什么

对。如果这些函数产生线程或其他什么,它们可能会以不同的顺序运行。但这些函数的实际代码将按顺序执行

如果您谈论的是访问流程之外的任何内容,那就不同了。C和C++作为语言,没有并发性的概念,而这(除了一些语言特性之外,如<>代码> Value)。程序内的一切都是连续的,但程序外的世界是未知和不可知的(没有提供此类挂钩的库)


如果所讨论的库没有提供防止另一个进程接触代码所接触的某个全局状态的方法,那么您无法确保该状态将在设置时保持设置。

它将始终按该顺序运行,但如果您有线程修改使用f1和f2的基础变量,您必须使用互斥锁来保护它们

f2
不能直接在
f1
之后运行,因此
f2
不应依赖于系统处于
f1
将其保留的状态。事实上,除非有适当的锁,否则它们都不应该在多线程系统上处理状态


但是,可以保证
f1
将在调用
f2
之前返回。

鉴于代码块的现状,并且没有发生外部问题,可以保证只有在f1()终止后才会调用f2()。

f2将在f1()之后调用。但是它们之间可能会发生一些事情(这也会改变操作系统的状态)

可以保证执行此操作的线程将首先以f1结束,然后直接在调用f2之后完成。但是,当您依赖于当前正在执行的线程(某些共享OS资源)之外的状态时,就不能保证其他线程/进程/硬件会修改此资源,即使在执行这些方法时也是如此。然后需要某种锁来保护其他人访问的资源。当这样一个锁跨越该块时,还可以保证它不会在后续调用之间更改


根据您的操作系统和资源,这样的锁可能是可用的。但这方面的信息太少了

当你说“f2依赖于操作系统处于相同状态时”,你说的“相同状态”是什么意思?操作系统在调用“f1”之前所处的状态,或者在“f1”之后所处的状态?如果您提供一个“使用操作系统完成”的示例,会更清楚。我想我问这个问题时有点模棱两可。。假设我有大量其他进程在运行。在f1调用完成和f2调用开始之间,其他无数进程中的一个是否可能执行代码?您的意思是“它保证了吗”(大写I表示标准的神圣性)操作系统可以在f1、f2中的任何位置或它们之间中断线程。括号不会像您假设的那样改变这种行为。没有通用的方法来确保其他人不修改外部资源,如果您提供更多关于“使用操作系统做一些事情”的信息,我们可以告诉您是否有适合您的特定情况的方法