4

これは長い間私を困惑させてきました。

比較とスワップのような基本的なアトミック プリミティブがあれば、スピン ロックを実装する方法がわかります (そこからミューテックスを構築できます)。

ただし、これから条件変数を作成する方法がわかりません。これはどのように行われますか?

4

1 に答える 1

2

特に単純ではありません。以下は、Win32 (pre-Vista) で利用可能な同期プリミティブを使用して Windows で条件変数を実装するためのいくつかのアプローチを詳述している Douglas Schmidt (ACE ライブラリの主な責任者でもある) による論文へのリンクです。アプローチには、任意の OS プリミティブで一般的に利用可能な基本的なもののみを使用することが含まれ、アプローチのさまざまな制限について説明します。

結論(結論):

この記事では、Win32 プラットフォームでの条件変数の開発が難しく、エラーが発生しやすい理由を説明します。開発者が対処しなければならない微妙な設計上の問題がいくつかあります。一般に、調査したさまざまな実装は、正確性、効率性、公平性、および移植性によって異なります。これらすべての品質を最適に提供するソリューションはありません。

SignalObjectsAndWaitセクション 3.4のソリューションは、公平性が最重要である場合に適したアプローチです。ただし、このアプローチは他のソリューションほど効率的ではなく、移植性もありません。したがって、効率または移植性が公平性よりも重要である場合SetEventは、セクション 3.2 で説明されているアプローチがより適している可能性があります。当然、最も簡単な解決策は、Microsoft が Win32 API で条件変数を提供することです。

Vista 以降、Windows はネイティブ API を使用して条件変数をサポートすることに注意してください。

于 2010-02-23T05:19:52.923 に答える