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

时间:2014-03-31 09:14:12

标签: c function callback

我正在使用raspberry pi相机模块接口,它涉及一个回调函数,您可以注册到mmal缓冲区,并在每次抓取帧时运行。

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

让我们假设我们给一些循环一个回调函数,该函数将在某个事件发生时运行。如果使用之前发生的事件调用的回调函数尚未完成其工作,那么下一个事件到来时会发生什么?同一个回调函数是否可以开始运行(就像另一个线程?)而前一个仍在运行? 我怀疑它会,但我不得不要求理解。

2 个答案:

答案 0 :(得分:0)

它可以以不同的方式实施 情况可能是帧存储在缓冲区中,并且一个接一个地调用它们。这似乎有点像一个有限的缓冲生产者 - 消费者。也许回调函数是一个实时函数(它们有严格的运行时保证,确保缓冲区不会溢出)?在这种情况下? 或者,该函数在每个帧的单独线程中生成。如果它在单独的线程中同时调用该函数,则回调函数应该是线程安全的 http://en.wikipedia.org/wiki/Thread-safety

答案 1 :(得分:0)

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

最有可能的是,每次收到一个帧时都不会启动一个线程,等待回调后再等待下一帧。

您也可以查看mmal缓冲区文档(和/或codeà以了解它是如何工作的,以及是否需要在回调中使用线程安全代码。