C回调函数可以同时运行吗?

C回调函数可以同时运行吗?,c,function,callback,C,Function,Callback,我正在开发raspberry pi摄像头模块接口,它涉及一个回调函数,您可以将该函数注册到mmal缓冲区,每次抓取一帧时都会运行该函数 当先前运行的回调函数没有及时完成时,另一帧到达时,我的困惑就出现了 假设我们给某个循环一个回调函数,它将在某个事件发生时运行。如果在该事件的前一次发生时调用的回调函数尚未完成其工作,那么当下一个事件到达时会发生什么?同一个回调函数能否像另一个线程一样开始运行?而前一个仍在运行? 我怀疑它会,但我必须要求理解。它可以以不同的方式实现。 可能的情况是,帧存储在缓冲区

我正在开发raspberry pi摄像头模块接口,它涉及一个回调函数,您可以将该函数注册到mmal缓冲区,每次抓取一帧时都会运行该函数

当先前运行的回调函数没有及时完成时,另一帧到达时,我的困惑就出现了

假设我们给某个循环一个回调函数,它将在某个事件发生时运行。如果在该事件的前一次发生时调用的回调函数尚未完成其工作,那么当下一个事件到达时会发生什么?同一个回调函数能否像另一个线程一样开始运行?而前一个仍在运行?
我怀疑它会,但我必须要求理解。

它可以以不同的方式实现。 可能的情况是,帧存储在缓冲区中,函数被一个接一个地调用。这似乎有点像一个有界缓冲区生产者消费者。也许回调函数是一个实时函数,它们有严格的运行时保证,以确保在这种情况下缓冲区不会溢出? 或者在每个帧的单独线程中生成该函数。如果它在不同的线程中同时调用函数,那么回调函数应该是线程安全的。

这取决于调用回调的软件的实现

最可能的情况是,它不会在每次接收到帧时启动线程,并在等待下一帧之前等待回调的返回


您也必须查看mmal缓冲区文档和/或代码,以了解其工作原理以及回调中是否需要线程安全的代码。

什么系统/API/framework正在进行回调?无论是什么进行回调,都将决定回调是否可以并行进行。