在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”?
Leave a Reply