簡體   English   中英

C11 <thread.h> 在GCC?

[英]C11 <thread.h> in GCC?

我正在嘗試使用thread.h編譯一些C11代碼,但我不能。 我已經重新編譯了GCC(現在運行4.6.2),我正在嘗試使用gcc -std=c1x file.c -o file進行編譯。 我可以用g ++(使用thread庫)來做到這一點,但我不能在C中。是否thread.h沒有包含在GCC發行版中的thread.h

用於線程的標准C11頭是<threads.h> ,而不是<thread.h> N1570草案第7.26節。

大多數C標准庫(例如stdio)都不包含在gcc發行版中。 相反,gcc依賴於操作系統提供的任何運行時庫。 這通常包括頭文件(如<threads.h> )和實現庫的實際代碼。

對於大多數Linux系統(如果你願意,還是GNU / Linux),庫是GNU的glibc; 對於其他系統,它將是另一回事。

所以真正的問題可能是glibc,或者你正在使用的C庫,都支持C11的線程功能。

glibc在版本2.28中添加了對C11線程的支持 Ubuntu 18.04.1 LTS系統目前仍使用glibc 2.27。 同樣,這僅適用於使用GNU libc的實現,而不適用於所有基於gcc的實現。 WorldSEnder在評論中提到過。

更新:Ubuntu 18.10(不是LTS(長期支持)版本)有glibc 2.28,它支持<threads.h> 另外,正如user2548688的回答所指出的那樣, musl C庫支持<threads.h> 在Ubuntu上,您可以安裝musl-dev包並使用musl-gcc命令。

(注意,庫中的一些部分,與編譯器關系最密切的部分, 由gcc本身提供的。線程庫可能不是其中之一,但肯定需要一些編譯器支持。)

有關這方面的更多信息,請點擊此處

...(Atomics - stdatomic.h - 是可選的,可能需要等待在GCC 4.8中實現相關的語言功能。我猜測附件中的threads.h和bounds-checking接口中的可選線程接口K現在不想用於glibc,盡管它們可能會進入單獨的庫中。

我的猜測是我們不會在相當長的一段時間內看到這個,至少在標准的glibc和gcc中沒有實現(源文章提供了一些見解)。 我的個人猜測就像一年,大概需要兩年時間,直到它足夠穩定以供生產使用。 多數民眾贊成2k14(斷言(生存_2012)):P

引用GCC 標准頁面關於C11:

海灣合作委員會對該標准的部分內容提供的支持有限

雖然我只有GCC 4.6.1,但我的系統上沒有“thread.h”頭文件。

4.64.7的更改頁面都沒有提到線程。


4.7更改頁面中提到了“線程”,但在C11上下文中似乎沒有任何與它有關的內容。 另外,在upcomming 4.8頁面中沒有提到C11。

musl libc有C11 http://www.musl-libc.org/ glibc還沒有threads.h支持

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM