Подтвердить что ты не робот

C11 GCC threads.h не найден?

Следующий код

#include <threads.h>

Дает мне эту ошибку:

fatal error: threads.h: No such file or directory

Используя последние GCC и Clang с -std = c11.

Является ли потоки C11 не поддерживаемыми GCC и Clang? Или есть хак (или что-то для установки), чтобы получить его? Я просто использую Ubuntu 14.04 с пакетами gcc и clang из репозитория Ubuntu.

4b9b3361

Ответ 1

Документ gcc C11 status указывает, что он не поддерживает многопоточность, он говорит:

Threading [Optional] | Library issue (not implemented)

Как указано в документе, это на самом деле не проблема gcc или clang, а проблема glibc. Как отметил Зак, похоже, может скоро начнется работа, чтобы получить поддержку для этого в glibc, но это вам сейчас не поможет. Тем временем вы можете использовать этот .

Исправлено для glibc 2.28

В соответствии с ошибкой 14092 - поддержка потоков C11 это исправлено в glibc 2.28:

Реализовано вверх по течению:

9d0a979 Add manual documentation for threads.h
0a07288 nptl: Add test cases for ISO C11 threads
c6dd669 nptl: Add abilist symbols for C11 threads
78d4013 nptl: Add C11 threads tss_* functions
918311a nptl: Add C11 threads cnd_* functions
3c20a67 nptl: Add C11 threads call_once functions
18d59c1 nptl: Add C11 threads mtx_* functions
ce7528f nptl: Add C11 threads thrd_* functions

Он будет включен в 2.28.

Ответ 2

Musl поддержка C11 <threads.h>.

В Debian установите musl-tools, а затем скомпилируйте с помощью musl-gcc. Я работаю над загрузкой Debian с Musl вместо Glibc.

Также см. this.

Ответ 3

В то время как потоки C11 еще не реализованы, потоки С++ 11 реализованы и имеют аналогичную функциональность. Конечно, С++ 11 может быть неприемлемым решением, и в этом случае ваши лучшие комментарии о потоках POSIX - ваша лучшая надежда.