web-dev-qa-db-ja.com

GNU / Linux用のC11スレッドを実装しているCライブラリはありますか?

a lotC11とC11のスレッド化に関する質問がありましたが、決定的な答えはどこにもありません。

any CライブラリはGNU/Linux-likeで使用可能なC11スレッドインターフェースを実装しますか?たとえば、「オプション」を提供します_<threads.h>_および スレッドサポートライブラリthrd_create()のように、 C11標準 from p付近376。

理想的には、common/generic/multiアーキテクチャ(GNU/Linux、x86_64、portable-ishなど)向けの、一般的、オープンソース、または無料のライブラリを見つけたいと考えています。

より便利で関連性の高いいくつかのSOリンク:

  • this one および this one on glibc;
  • これ これは標準のことです。
  • これ about clang;
  • この1つ C11全般について この1つ Windowsおよびその他のプラットフォームについて
  • C++ 11 threadingについてはもっと詳しく説明しますが、C11にしか興味がありません。

ライブラリのスターター以外のオプション:

  • glibc ライブラリ しない ; 2012年から 未解決のバグ があります。 GSoCの提案 がありましたが 受け入れられません ;
  • LLVM/Clang プロジェクトにはCライブラリがありません。
  • musl ライブラリ しない ; -今では!以下の編集および answer を参照してください。
  • Newlib ライブラリはスレッド化をサポートしています( docs )が、pthreadもC11スレッドも使用していません。
  • Clibc はしません;
  • この比較 グラフ、これは疑わしい(たとえば、C11スレッドローカルストレージサポートのmuslソースには証拠がありません);
  • [〜#〜] bsd [〜#〜] に関するいくつかのさまざまな投稿、
  • Pelles 、これは閉じられ、Windowsのみで表示されます。

私はnotPOSIXスレッド(多くの素晴らしいオプション)、Windows、IDE、C++ 11(I GNU _libstdc++_およびLLVM/Clang _libc++_は、C++ 11の_std::thread_を提供します。これは_-pthread_を使用します)

ありがとう!


(再)編集:質問が再度開かれたので、 移行されたコンテンツを回答に クリーンアップします。

53
hoc_age

musl 現在(2014年9月現在)、C11スレッドを実装しています!

この最近のmuslメーリングリストの投稿 および 2014年7月から9月のそのリスト に関する他の会話によると、 musl ライブラリが2014-09-07)では、C11スレッドインターフェースを実装していますが、 比較チャート ;この文書の執筆時点では、これを反映していません。

この質問が再び開かれたため、このコンテンツを適切な回答に移動しました。

17
hoc_age

最後に GNU LIBC 2.28 はC11 ISOスレッドをサポートします。

Archlinux、Gentoo、Suse Tumbleweedがすぐにサポートすると思います。今年後半には、FedoraとUbuntu、およびその他の2019年以降にリリースされます。

13
Peter

https://github.com/jtsiomb/c11threads は「POSIXスレッドを介したCrivial C11 threads.hの実装」です。単一のヘッダーに含まれます。

うーん、GCC 4.9.0は​​実際にはC11標準の実質的なサポートを提供しているようです(少なくとも2014年6月の終わり頃にWebドキュメントが変更されて以来)。

から https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Standards.html

C11として知られるC標準の4番目のバージョンは、2011年にISO/IEC 9899:2011として公開されました。 GCCは、この標準を実質的に完全にサポートしており、-std = c11または-std = iso9899:2011で有効になっています。 (開発中、この標準バージョンのドラフトはC1Xと呼ばれていました。)

そして https://gcc.gnu.org/gcc-4.9/changes.html から

ISO C11アトミック(_Atomicタイプ指定子および修飾子とヘッダー)がサポートされるようになりました。 ISO C11汎用選択(_Genericキーワード)がサポートされるようになりました。 ISO C11スレッドローカルストレージ(_Thread_local、GNU C __thread)と同様)がサポートされるようになりました。ISOC11サポートは、ISO C99サポートとほぼ同じレベルの完全性を備えています。識別子(-fextended-identifiersが使用されている場合の例外を除く)、浮動小数点の問題(主に、ただし完全にAnnexes FおよびGのオプションのC99機能に関連しているわけではありません)およびオプションのAnnexes K(境界チェックインターフェイス)およびL(分析可能性)。新しいC拡張__auto_typeは、C++ 11 autoの機能のサブセットをGNU C.

そのことから、ペダルが金属に当たったときにそのすべてが実際に何を意味するのかを伝えるのは困難です。環境を最新のGCC 4.9.0リリースにアップグレードし、いくつかの単純なドライバープログラムを実行することで、実装の量を確認できます。

それが役に立てば幸い。

4
luis.espinal

FreeBSDはthreads.h FreeBSD 10.0以降プログラムはlibstdsthreadsにリンクする必要があります。

3
M.K. aka Grisu

PDCLib(パブリックドメインC標準ライブラリ)には、threads.hのAFAICT完全サポートが含まれており、pthreadのラッパーではありません。

1
MarcusJ

FreeBSDはposixスレッドをラップしているようです。ここにあります: FreeBSD c11 threads 。これをCygwinで使用できました。今のところ問題はありませんが、私はまだあまり使いません。

0
annoying_squid