2012-10-10 66 views
0

我有一個用例,我想要獲取一個條件變量並在一段時間間隔後釋放它(例如:我有一個時間有序的事件隊列,並且我想在指定的時間段內阻塞。)pthread_cond_timedwait中的秒溢出

Duration = Earliest Time in Q - Current Time() 

我遇到以下這些將完全符合我的目的。

pthread_cond_timedwait(pthread_cond_t *restrict cond, 
pthread_mutex_t *restrict mutex, 
const struct timespec *restrict abstime); 

但問題是timespec.sec是time_t類型(這是一個32符號類型)和溢出。有沒有解決方法?是否還有其他構造可供使用,我們將會阻止更長時間?我正在使用Linux平臺。

回答

1

在64位Linux環境中,time_t是64位而不是32位.32位time_t在2038年之前不會溢出,因此您還有幾年的時間才能升級機器。

+0

是的,在這種情況下,代碼必須移植到64位編譯器。 pthread_cond_timedwait失敗,因爲我們傳入32位類型。是否有任何類似的庫取代了一個有符號的32位類型而採用了雙重阻塞。 – KodeWarrior

+1

@KodeWarrior:說你今天的pthread_cond_timedwait()調用的'abstime.sec'字段溢出是無意義的,因爲那意味着你要求它等待超過25年。 – caf

+0

我不明白爲什麼它是荒謬的。當你建立系統時,你將他們設計爲在未來10天或未來10年內工作? – KodeWarrior