[英]Why does one of my ways of passing retval (void *) to pthread_exit() give unexpected results?
[英]Why does pthread_exit use void*?
我最近開始使用 posix 線程,標准中參數類型的選擇讓我很好奇。 我一直無法回答為什么pthread_exit使用void*而不是int來返回線程狀態的問題? (與退出相同)。
我看到的唯一優點是它讓程序員可以定義他們想要的狀態(例如返回一個指向復雜結構的指針),但我懷疑它是否像這樣被廣泛使用。
似乎在大多數情況下,由於必要的強制轉換,這種選擇具有更多的開銷。
這不僅僅是狀態,它是線程的返回值。 使用指針允許線程返回指向動態分配的數組或結構的指針。
您無法真正將其與exit()
參數進行比較,因為那是用於向操作系統發送狀態。 這故意非常簡單,以允許與許多操作系統的可移植性。
我看到的唯一優點是它讓程序員可以定義他們想要的狀態(例如返回一個指向復雜結構的指針),但我懷疑它是否像這樣被廣泛使用。
的確,這就是原因。 而且它可能沒有被廣泛使用(例如,您可以通過其他方式傳遞值,例如傳遞給線程 function 的指針、具有同步的全局變量等)。 但是如果你有一個像void pthread_exit(int);
,它帶走了返回指針的能力。 所以void pthread_exit(void*);
是一種更靈活的設計。
似乎在大多數情況下,由於必要的強制轉換,這種選擇具有更多的開銷。
在大多數情況下,根本不使用它,因為常見的方法是什么都不返回,即pthread_exit(NULL);
. 因此,只有在返回指針(結構等)時才重要,在這種情況下,不需要轉換為void *
,因為任何指針類型都可以在沒有顯式轉換的情況下轉換為void *
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.