ビジーウェイト
以下のPOSIXスレッドライブラリを使ったC言語コードでは、複数のスレッドがグローバル変数によるフラグを共有している。1番目のスレッドはビジーウェイトでフラグの値の変化を待っている。
ccコマンドの実態としてGCCまたはClangが利用可能なUNIX系システムでは、次のように上記コードをコンパイルすることができる:
なお、C言語およびC++におけるvolatileキーワードはコンパイラ最適化を抑止するための修飾子であり、効果は処理系に依存する。C/C++の規格でスレッドが標準化されていなかった時代では、スレッド間で共有するフラグ変数にvolatileを指定することで、レジスタキャッシュではなく必ずメモリから値を読み出すように最適化を抑止する効果が期待されることから慣習的に使われていたが、本来はスレッドの同期目的で使ってはならない。フラグ変数の操作をミューテックス (mutex) によるクリティカルセクションで保護して明示的に同期したり、条件変数 (condition variable) を使ったり、上記コード例のようにC11やC++11規格以降のアトミック変数を使ったりするべきである。
一方、JavaあるいはC#のような後発のプログラミング言語では、最初からスレッドが標準化されて言語仕様に組み込まれており、限定された範囲でvolatileキーワードを軽量な同期プリミティブの実装に利用することが可能である。