2009-01-16 94 views

回答

34

如果您的標準庫是多線程感知的,那麼它可能有一個#define,它將errno更改爲返回線程本地錯誤返回值的函數調用。但是,要使用此功能,您一般需要包括<errno.h>,而不是依靠extern聲明。

我發現了一篇文章Thread-safety and POSIX.1,它解決了這個問題。

+0

謝謝!在/usr/include/bits/errno.h中的快速檢查證實,在我的Ubundu機器上,使用線程時,errno確實被定義爲per-thread。 – 2009-01-16 08:04:36

16

man errno說:

錯誤號是由ISO C標準 定義爲 int類型的修改的左值,並且不能明確地聲明 ; errno可能是一個宏。 errno 是線程局部的;將其設置爲一個 線程在任何其他線程中都不會影響其值 。

相關問題