关于回调函数和线程的一般查询

San*_*aju 14 c++ multithreading callstack function-pointers callback

我有一个关于线程和回调的一般问题.比方说,我们有一个线程与主程序一起连续运行.

主程序已经在线程中注册了回调函数.所以线程可以随时调用回调函数.通常,我们通过将函数指针传递给线程来注册回调.我想知道线程调用该回调函数的时间,它是该线程的一部分,还是它将成为主程序的一部分.我想知道这个过程的机制,比如当线程调用回调时主程序执行是如何停止或中断的.另一件事是在调用回调时函数调用堆栈将如何表现.

Mar*_*tos 12

作为一般规则,函数调用始终在调用者的上下文(线程)中进行.无论被调用者是函数,成员函数,仿函数对象还是其他任何东西都无关紧要.

换句话说,当线程调用您的回调时,调用发生在线程中.主线程未停止以执行回调.事实上,它不会以任何方式涉及回调的执行.

各种框架提供了一些技巧,使它看起来好像一个线程可以直接调用另一个线程,但这总是通过某种编组的消息传递机制以合作的方式完成.线程通常不会互相旋转.

  • @ user1592046:是的.任何并发访问(至少其中一个是写入)必须受某种同步机制的保护.如果一个线程希望等待另一个线程更改变量,您还需要使用信号机制,如信号量或条件变量. (3认同)
  • 例如,我的主程序中有2个函数。1)FunctionA()->这是回调函数2)FunctionB()->这是正常函数。这两个函数都可以访问全局变量。因此,在这种情况下,该变量上必须有一个互斥量。因为回调可以随时发生。 (2认同)