OS X计时器分辨率和重新安排延迟

时间:2012-04-15 04:50:08

标签: macos

我需要将现有的基于WIN32 / Linux的应用程序移植到OS X,并且想要估计是否存在任何潜在的障碍。

该应用程序具有“软”实时约束。

具体来说,它具有高优先级线程,需要以(可能)高速率(低至1毫秒)唤醒,进行一些检查,然后大部分时间几乎立即产生。

目的超出了本消息的范围,但设计不可更改(实际上不可更改),因此请不要评论如何更改它以及它是否有效(它是)。

线程的逻辑结构是:

for (;;)
{
    wait(event_object, timeout);
    ... do something ...
}

当发出event_object信号或超时到期时,需要唤醒线程。 超时可能因情况而异,但可以降至1毫秒。

应用程序的WIN32版本使用timeBeginPeriod()来影响系统调度程序,并在涉及该线程的情况下更改调度量。

请问您是否可以在OS X下实施,即OS X是否“真正可以预留”。

这归结为两个问题:

1)如果高优先级线程变得可计算(因为event_object被发信号通知或超时到期),当前执行的低优先级线程是立即被抢占还是仅在下一个100 Hz(kern.clockrate)时钟滴答时被抢占。

2)各种OS X“等待”功能的实际定时器分辨率是多少,例如pthread_cond_timedwait?是1/100(即10 ms)还是1 ms或更低?或者它取决于某些东西,可以通过编程方式进行更改(比如Windows中的timeBeginPeriod)?

重申一下,应用程序是“软”实时的。如果线程不能一直处于正常状态(没有飞机会崩溃或病人死亡),这是可以的,但是需要的是通常根据需要安排,大部分时间。

感谢您的建议。

0 个答案:

没有答案