C11のスレッド対応はまだまだな感じ

高木です。おはようございます。

すでにご覧になった方もいらっしゃるかもしれませんが、当ウェブサイトの「技術情報」メニューに「21世紀のC言語入門」が追加されています。

追加されているといっても、まだ告知だけで内容は何もありません。
これからにご期待ください。

その「21世紀のC言語入門」を執筆するにあたって、現在いろいろと下調べをしています。

「21世紀のC言語入門」ではISO/IEC 9899:2011、いわゆるC11の入門記事にする予定です。
C11はオプションの仕様がいろいろあり、同じC11でも処理系によってサポートされる仕様がかなり異なります。

C11で加わった仕様のうち、大きなもののひとつにマルチスレッド対応がありますが、この仕様もオプション扱いです。
そこで、実際に使う処理系のサポート状況はどうなっていんだろうということで、GCCとClangについて調べてみました。

まず、MinGW-w64ですが、この処理系にはがそもそも存在しませんでした。
MinGW-w64ベースのClangを調べても同様でした。

CygwinやFedraでも調べてみましたが、やはりを使うことはできませんでした。
Cygwinの場合は、自体は存在するのですが、その先のだったかがないようです。

本来、C11では、マルチスレッドをサポートしない場合には、__STDC_NO_THREADS__マクロが1に定義されることになっています。
ところが、GCCもClangも__STDC_NO_THREADS__マクロが定義されていないにもかかわらず、が使えないという状況です。

C11はその名前からもわかるように、すでに標準規格の制定から約6年が経過しています。
にも関わらず、コンパイラの実装状況はお粗末なものです。

現在では、Cが使われるのは、マイコンを使った組込みプログラムや、オペレーティングシステムなどの低水準なプログラムの開発に使われることがほとんどでしょう。
そのため、マルチスレッドの標準サポートなんかより、フリースタンディング環境でも使えるコア言語のほうが重要というものです。
「21世紀のC言語入門」でも、そうした状況を踏まえた解説を心掛けたいと思います。