C言語でのコード例とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > C言語でのコード例の意味・解説 

C言語でのコード例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/06 17:25 UTC 版)

ビジーウェイト」の記事における「C言語でのコード例」の解説

以下のPOSIXスレッドライブラリ使ったC言語コードでは、複数スレッドグローバル変数によるフラグ共有している。1番目のスレッドビジーウェイトフラグの値の変化待っている。 #include #include #include #include /* 全関数から見えるグローバルフラグ変数 */atomic_int g_flag;/* スレッド#1はフラグが偽 (0) になることをスピンして待つ */static void *thread_func1(void*) { while (g_flag) { /* 何もしない - 単にチェックしながら回り続ける */ } printf("Thread#1 received notification: value of flag has been changed to %d.\n", g_flag); return NULL;}/* スレッド#2は一定時間待機した後にフラグを偽 (0) にする */static void *thread_func2(void*) { sleep(60); /* 60秒スリープ */ g_flag = 0; printf("Thread#2 changed the value of flag to %d.\n", g_flag); return NULL;}int main(void) { int ret_code; pthread_t t1, t2; g_flag = 1; /* フラグ真にする */ ret_code = pthread_create(&t1, NULL, thread_func1, NULL); if (ret_code != 0) { printf("Failed to create pthread #1.\n"); return -1; } ret_code = pthread_create(&t2, NULL, thread_func2, NULL); if (ret_code != 0) { printf("Failed to create pthread #2.\n"); return -1; } pthread_join(t1, NULL); pthread_join(t2, NULL); printf("All pthreads finished.\n"); return 0;} ccコマンド実態としてGCCまたはClang利用可能UNIX系システムでは、次のように上記コードコンパイルすることができる: $ cc -std=c11 spinlock.c -pthread なお、C言語およびC++におけるvolatileキーワードはコンパイラ最適化抑止するための修飾子であり、効果処理系依存するC/C++規格スレッド標準化されていなかった時代では、スレッド間で共有するフラグ変数volatile指定することで、レジスタキャッシュではなく必ずメモリから値を読み出すように最適化抑止する効果期待されることから慣習的に使われていたが、本来はスレッドの同期目的使ってならないフラグ変数操作ミューテックス (mutex) によるクリティカルセクション保護して明示的に同期したり、条件変数 (condition variable) を使ったり、上記コード例のようにC11C++11規格以降アトミック変数使ったりするべきである。 一方JavaあるいはC#のような後発プログラミング言語では、最初からスレッド標準化され言語仕様組み込まれており、限定され範囲volatileキーワードを軽量な同期プリミティブ実装利用することが可能である。

※この「C言語でのコード例」の解説は、「ビジーウェイト」の解説の一部です。
「C言語でのコード例」を含む「ビジーウェイト」の記事については、「ビジーウェイト」の概要を参照ください。

ウィキペディア小見出し辞書の「C言語でのコード例」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「C言語でのコード例」の関連用語

C言語でのコード例のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



C言語でのコード例のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのビジーウェイト (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS