我正在开发一个本质上是单线程的程序,它唯一的线程是主事件循环线程。因此,它的所有数据结构基本上都不受临界区之类的保护。
在它最近集成了一些基于 DirectShow API 的新功能之前,一切都很好。一些 DirectShow API 打开第二个事件循环,并在第二个循环内调度消息(即,不可预测地调用其他事件处理回调)。因此,当调用第二个事件处理函数时,它可能会损坏调用 DirectShow API 的函数正在访问的数据结构。
我在内核编程方面有一些经验。我想到的是,对于一个单线程程序,它应该如何处理它的数据结构就像内核应该如何处理 per-CPU 数据结构一样。在内核中,当一个函数访问每个 CPU 的数据时,它必须禁用中断(非常类似于第二个事件循环中的消息调度)。但是,我发现没有简单的方法可以避免调用 DirectShow API 或防止在其中创建第二个事件循环,有什么办法吗?