我有一个使用 pthreads 的多线程应用程序。我有一个互斥锁()锁和条件变量()。有两个线程,一个线程正在为第二个线程(一个工作线程)生成数据,该线程正在尝试以实时方式处理生成的数据,以便在尽可能接近固定时间段过去的情况下处理一个卡盘。
这工作得很好,然而,偶尔当生产者线程释放工作者正在等待的条件时,在工作者线程获得控制权并再次执行之前,会出现长达近一秒的延迟。
我知道这一点,因为在生产者释放工人正在等待的条件之前,如果是时候处理另一个卡盘,它会为工人做一个卡盘处理,然后在工作线程中接收到条件后,它也会立即执行如果是时候加工另一个夹头,则加工一个夹头。
在后一种情况下,我看到我处理卡盘很多次都晚了。我想消除这种损失的效率,并尽我所能保持卡盘的滴答声尽可能接近所需的频率。
我能做些什么来减少生产者的释放条件与检测到该条件已释放以使工作人员恢复处理之间的延迟吗?例如,生产者调用某些东西来强制自己切换上下文是否会有所帮助?
底线是工人必须等待每次它要求生产者为自己创建工作,以便生产者可以在告诉工人它准备好再次并行运行之前与工人的数据结构混淆。生产者的独占访问时间很短,但在此期间,我也在检查生产者代表工人完成的实时工作,而生产者具有独占访问权限。不知何故,我的手重新回到并行运行,偶尔会导致我想避免的显着延迟。请建议如何最好地实现这一点。