C++ 关于回调函数和线程的常规查询

C++ 关于回调函数和线程的常规查询,c++,multithreading,callback,function-pointers,callstack,C++,Multithreading,Callback,Function Pointers,Callstack,我有一个关于线程和回调的一般性问题。 例如,我们有一个线程与主程序一起连续运行 主程序已向线程注册回调函数。因此线程可以随时调用回调函数。 通常,我们通过向线程传递函数指针来注册回调。我想知道线程何时调用回调函数,它是该线程的一部分,还是主程序的一部分。我想知道这个过程的机制,比如当线程调用回调时,主程序的执行是如何停止或中断的。另一件事是调用回调时函数调用堆栈的行为。一般来说,函数调用总是在调用方的上下文(线程)中进行的。被调用方是函数、成员函数、函子对象还是其他任何对象都无关紧要 换句话说,

我有一个关于线程和回调的一般性问题。 例如,我们有一个线程与主程序一起连续运行

主程序已向线程注册回调函数。因此线程可以随时调用回调函数。
通常,我们通过向线程传递函数指针来注册回调。我想知道线程何时调用回调函数,它是该线程的一部分,还是主程序的一部分。我想知道这个过程的机制,比如当线程调用回调时,主程序的执行是如何停止或中断的。另一件事是调用回调时函数调用堆栈的行为。

一般来说,函数调用总是在调用方的上下文(线程)中进行的。被调用方是函数、成员函数、函子对象还是其他任何对象都无关紧要

换句话说,当线程调用回调时,调用发生在线程中。主线程不会停止以执行回调。事实上,它与回调的执行没有任何关系


各种框架提供了一些技巧,使一个线程似乎可以直接调用另一个线程,但这始终是通过某种编组消息传递机制以协作方式完成的。线程通常不会旋转彼此的堆栈。

对于多线程,您使用哪种方法?例如,我的主程序中有两个函数。1) FunctionA()->这是回调函数2)FunctionB()->这是普通函数。这两个函数都可以访问全局变量。所以在这个上下文中,这个变量需要一个互斥。因为回调可以随时进行。@user1592046:是。任何并发访问(至少其中一个是写访问)都必须受到某种同步机制的保护。如果一个线程希望等待另一个线程更改变量,则还需要使用信号量或条件变量等信令机制。