2012-05-08 69 views
0

我使用的是圖如下:pthread_cond_t是一個對象還是什麼?

鍵--->任務ID

價值觀--->pthread_cond_t對象

當某個任務完成後,我醒來相關聯的所有pthreads它使用匹配的pthread_cond_t元素。

我的問題很簡單 - 什麼是pthread_cond_t?它是一個對象嗎?因爲如果我刪除它,地圖會調用它對我不好的構造函數。如果它不是 - 我能不能回

pthread_cond_t cond = *(_flushCond->operator [](task_id)); //map of conditions 
_flushCond->operator [](task_id) = NULL; 
return cond; 

我所試圖做的是免費地圖供以後使用(我重用的ID)的對象,並返回pthread_cond_t對象在那裏。

+0

pthread是一個C API,所以不會有構造函數或任何東西。你應該能夠自由地傳遞它。 –

+0

但它有沒有任何指針,或其他任何原始類型? – yotamoo

+2

這是一個不透明的類型,所以你的代碼不應該關心裏面的東西。 –

回答

3

正如其他人所說的那樣,它是一種不透明的類型(或者如果你願意,可以處理)到一個實現定義的類型。在某些實現中,它可能是一個指向實際條件變量結構的指針,也就是結構本身,只是指向某個實現內部數據結構的指針。 POSIX標準對此沒有任何保證也沒有承諾,並且只允許您使用該類型的「對象」執行某些操作。在這方面,它與其他類型的Pthreads非常相似,如pthread_mutex_t或pthread_t。

您不能安全地或至少可移植地將pthread_cond_t用作STL映射中的值。原因是,對價值的要求是可複製和可分解的。雖然技術上可行的是pthread_cond_t,但它不是legal to do so

您應該存儲一個pthread_cond_t *(指針),而不是像其他類型的「可複製」那樣。

相關問題