我與已經實現了兩個POSIX函數並行線程,mq_timedreceive,那麼pthread_cond_timedwait和CLOCK_REALTIME
mq_timedreceive() and pthread_cond_timedwait()
這些功能都使用基於CLOCK_REALTIME絕對超時系統的工作。這個時鐘在系統啓動過程中的不同時間發生變化,並且可以在幾秒到幾個小時內向後或向前移動。
公開組說:
如果定時器選項的支持,超時應根據該 CLOCK_REALTIME時鐘;如果不支持定時器選項,則應根據時間() 函數返回的系統時鐘來確定超時時間。 (mq_timedreceive)
對於情況下,當系統時鐘由 操作不連續推進,預計實現處理任何計時等待 到期在這段時間竟彷彿已經發生的時間。 (那麼pthread_cond_timedwait())。
但是,在時鐘反向設置的情況下,這並沒有提供任何指導。
QNX通過提供
mq_timedreceive_monotonic().
的mq_timedreceive_monotonic()函數是一個QNX Neutrino中擴展解決了這個問題; 它與mq_timedreceive()類似,但它使用CLOCK_MONOTONIC,所以 超時不受系統時間更改的影響。
有沒有一種很好的方法來實現Linux中的QNX功能?
對於mq_timedreceive()我可以使用mq_receive()和poll()。但對於條件變量,我還沒有提出一個乾淨的方法。我可以使用itimer和信號,但似乎太複雜。
另一種解決方案當然是不要調整時鐘或使用從CLOCK_MONOTONIC派生的不同時間時鐘,但我無權改變設計。
謝謝!我錯過了。我不認爲這是在pthread_cond_timedwait()文檔中引用的,而不是斜向引用通用時鐘屬性。 pthread_condattr_setclock()不會交叉引用pthread_cond_timedwait()。如果mq_timedxxxx()函數以類似的方式將其添加到mq屬性將會很好。 –