我想爲給定的線程ID調用pthread_join,但只有在該線程已經啓動的情況下。安全的解決方案可能是添加一個變量來跟蹤哪個線程開始或未開始。但是,我想知道是否可以檢查pthread_t變量,如下面的代碼。是否有無效的pthread_t ID?
pthread_t thr1 = some_invalid_value; //0 ?
pthread_t thr2 = some_invalid_value;
/* thread 1 and 2 are strated or not depending on various condition */
....
/* cleanup */
if(thr1 != some_invalid_value)
pthread_join(&thr1);
if(thr2 != some_invalid_value)
pthread_join(&thr2);
凡some_invalid_value可能是0,或者依賴於實現 'PTHREAD_INVALID_ID' 宏觀
PS: 我的假設是的pthread_t類型是可比的,可轉讓的假設基礎上
PPS: 我想這樣做,因爲我認爲調用無效線程ID上的pthread_join是不確定的行爲。不是這樣。但是,加入之前加入的線程是未定義的行爲。現在讓我們假設重複調用上述「功能」。 無條件地調用pthread_join並檢查結果可能會導致在以前連接的線程上調用pthread_join。
你總是可以使用pthread_self()......一個線程,你想必不會加盟;-)。可以使用'pthread_t invalid_thread = pthread_self()'來提高可讀性。 – 2011-06-08 09:50:55