pthreads や D の実装に関する詳細はわかりませんが、一般的に言えば、条件変数の最適なオーバーヘッドは、カーネル呼び出しが 1 回余分に発生し、コンテキスト スイッチが発生する可能性があることです。
典型的な実装は、イベントとミューテックスの単なるラッパーであるため、オーバーヘッドとタイミングは、これらのカーネル オブジェクトの動作によって特徴付けることができます。待機中、スレッドはスケジュールされたタイム クォンタムの残りを放棄し、起動時にスレッドはカーネルによってスケジュールされ、優先度に基づいて次に利用可能なタイム クォンタムを取得します。これは、負荷とカーネル構成に大きく依存しますが、通常は数ミリ秒以内です。
条件変数の場合、ミューテックスを再取得するという追加のタスクがあり、もちろんブロックされる可能性があります。ブロックしない場合、それはまだカーネル呼び出しです。これは、比較すると非常に高速ですが、単一のプロセスに限定されている少数のアトミック CPU 命令に最適化される可能性があります。[ed: たとえば、Win32 の CRITICAL_SECTION または Linux の futex。]
最悪のケースは、条件変数が誤ってトリガーされ、スレッドがウェイクアップして何もすることがないことを発見することですが、これは通常、総オーバーヘッドのごく一部を占めています。