Любая библиотека C реализует потоки C11 для GNU/Linux?
Были проблемы с много вопросов о потоках C11 и C11, но я не вижу окончательного ответа в любом месте:
. Любая библиотека C реализует интерфейс потоков C11, который можно использовать в GNU/Linux-подобном?, например, предоставить "необязательный" <threads.h>
и библиотека поддержки потоков, например thrd_create()
, стандарт C11 рядом с p. 376.
В идеале я хотел бы найти библиотеку, которая является общепринятой, открытой или бесплатной, для общей/общей/мульти-архитектуры (например, GNU/Linux, x86_64 или portable-ish).
Несколько полезных и релевантных ссылок SO:
- этот и этот на
glibc
;
- этот, говорящий о стандарте;
- этот о
clang
;
- этот о C11 вообще и этот о Windows и других платформах;
- гораздо больше о потоке С++ 11, но меня интересует только C11.
Некоторые параметры, не связанные с стартом для библиотек:
Я заинтересован не в потоках POSIX (много прекрасных опций), Windows, IDE и С++ 11 (я знаю, что GNU libstdc++
и LLVM/Clang libc++
предоставляют С++ 11 std::thread
, который использует -pthread
)
Спасибо!
(повторно) Изменить: вопрос повторно открыт, поэтому перенесенный контент для ответа для очистки.
Ответы
Ответ 1
musl теперь (начиная с сентября 2014 года) реализует потоки C11!
В соответствии с это последнее сообщение о переписке мульфильмов и другой разговор на который список в июле-сентябре 2014 г., похоже, что библиотека musl теперь (по состоянию на 2014-09-07) реализует C11, хотя сравнительная таблица; не относится к этому письму, отражая это.
Поскольку этот вопрос снова открыт, я переместил это содержимое на правильный ответ.
Ответ 2
https://github.com/jtsiomb/c11threads - это "тривиальная реализация потоков C11 по потокам POSIX". содержащихся в одном заголовке.
Ответ 3
Хммм, похоже, что GCC 4.9.0 фактически обеспечивает существенную поддержку стандартов C11 (по крайней мере, так как веб-документы были изменены примерно в конце июня 2014 года.
Из https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Standards.html
Четвертая версия стандарта C, известная как C11, была опубликована в 2011 как ISO/IEC 9899: 2011. GCC имеет практически полную поддержку этот стандарт, включенный с -std = c11 или -std = iso9899: 2011. (Пока в разработка, черновики этой стандартной версии назывались C1X.)
И из https://gcc.gnu.org/gcc-4.9/changes.html
ИСО C11 атомистика (спецификатор _Atomic и спецификатор и заголовок). Стандартные варианты ISO C11 (Ключевое слово _Generic) теперь поддерживаются. Потоковое хранилище ISO C11 (_Thread_local, аналогично GNU C __thread) теперь поддерживается. ISO C11 поддержка теперь находится на том же уровне полноты, что и поддержка ISO C99: по существу, по модулю ошибок, расширенные идентификаторы (поддерживаемые за исключением угловых случаев, когда используются -fextended-identifiers), проблемы с плавающей точкой (в основном, но не полностью связанные с необязательными C99 из приложений F и G) и дополнительных приложений K (Интерфейсы проверки границ) и L (анализируемость). Новое расширение C __auto_type предоставляет подмножество функций С++ 11 auto в GNU C.
Из этого трудно сказать, что все это будет иметь в виду, когда педаль попадает в металл. Обновление среды с последней версией GCC 4.9.0 и несколькими простыми программами драйверов подтвердит, насколько и как мало это реализуется.
Надеюсь, что это поможет.
Ответ 4
FreeBSD предоставляет threads.h
с FreeBSD 10.0. Программа должна быть связана с libstdsthreads.
Ответ 5
PDCLib (стандартная библиотека Public Domain C) включает полную поддержку AFAICT для threads.h, и это не оболочка вокруг pthreads.