在 Linux 上不能用 pthread_delay_np

2016年系統軟體課程裏面有人提到:「為什麼不能用 pthread_delay_np,或是 pthread_cond_timewait等等」

會有這個問題是因為 jserv 在上到 pthread / concurrency 的時候常會提到中文界第一個以及唯一一個 pthread 文章翻譯「Getting Starated with POSIX Threads」,我們必須要考量到這篇文章翻譯的時間,是距今快要 20 年前的1998年翻譯完成的。當時使用的系統也不是 Linux,是 DEC OSF/1!作者另外也測試了 solaris 2.5.1 跟 SunOS 4.1.4。

回到正題,那為什麼 Linux 上不能用 pthread_delay_np 呢?

原因是因為,pthread_delay_np 只支援 HP-UX / VMS / Tru64 UNIX。pthread_delay_np() 存在於 POSIX.1c D4 draft,而 POSIX.1c D4 的 implementer 就是製作 OSF 的 DCE!

我們另外可以觀察到 pthread_delay_np 的後綴是 _np,代表這個function 是 nonprotable extensition,並不是在 POSIX 的標準之中。可以從這個網站看到 pthread 規範的函式列表。

所以,在 Linux 上面不能用 pthread_delay_np 是一個很正常的事情,畢竟本來就沒有實作這個函式,參看 /usr/include/pthread.h 可以看到完整的 pthread 可用函式,或是呼叫真男人 man pthread.h 來看 manual。

reference: stackoverflow – Why do I get “error: ‘pthread_delay_np’ was not declared in this scope”?




如果你覺得這篇文章不錯,歡迎打賞 IOTA:RFHEIVXVIZWJFXTZORZZRCMHZF9PSGFUFWAAKXTFNZE9JQUY9HFQREJYYSPSXDRLECKXCAQQDOMSMYJYDKPCKWXBKD

或是點選下方圖片贊助我一杯咖啡:

Leave a reply:

Your email address will not be published.

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料