1

セマフォについて勉強中です。その本には答えのない質問があり、私はその問題を解決する方法を本当に知りたい.

質問は:

これは Algol68 で書かれたカウンティング セマフォです。

Down mutex: if mutex = 0 then access is blocked
                            else mutex := mutex -1
Up mutex: mutex := mutex + 1, restart  program
                            which blocked because of mutex.

バイナリセマフォを使用して、カウントセマフォの上に構築されたアップ、ダウンプリミティブを記述します (例のように)。

カウンティング セマフォでは、2 つのバイナリ セマフォ変数と 1 つの静的変数を使用します。

4

1 に答える 1

1

この例は、Algol 68 の正しい構文ではありませんが、Algol 68 スタイルの疑似コードである可能性が非常に高くなります。アルゴリズムの説明に見られるように、ステートメントを説明するためのいくつかのコメントが明確に含まれています。

Lindsey と Van der Meulen による書籍An Informal Introduction to Algol 68 」とAlgol 68 Revised Reportには、Algol 68でセマフォを使用する同様の例があります。

アップダウンのプリミティブは、提供された言語でプリミティブとして既に実装されているため、Algol 68 で記述しないでください。セマフォの操作の不可分なアトミックな性質は、それらを組み込む必要があります。それらを自分で実装すると、それらは非アトミックで中断不可能になり、操作セマフォとして役に立たなくなります! ただし、そのようなプリミティブの内部にあるものを学習することは有益です。

Algol 68 は、説明したように、sema 宣言と上下操作使用して、セマフォの宣言を提供します。また、 par記号とカンマ区切りで示される、それらが動作できる並列句も提供します。(セミコロンは、順次の非並列操作に使用されます)。,;

したがって:

sem セマフォ; ¢ 整数を含むセマフォを宣言します ¢
セマフォ:=レベル9; ¢ セマフォ内の整数を 9 の値に初期化します ¢セマフォを
アップし ます。¢ セマフォ内の整数は 1 つ増加します ¢ダウンセマフォ。¢ セマフォ内の整数は 1 減分されます ¢ int value := level semaphore ; ¢ セマフォ内に含まれる整数の値を抽出する ¢

したがって、引用したテキストは正しく翻訳されていません。示されているアルゴリズムは、Algol 68 機能のセマフォ オペレータの説明です。これは Algol 68 の一部ではなく、上下のオペレーターが実際に何をするかの説明です。これらを Algol 68 で実装するように求められるわけではありませんが、それらがどのように機能するかを示す例として、他の言語で実装してください。Algol 68 には、カウント セマフォが既に含まれています。他の言語 (Algol 68 以外) には、バイナリ セマフォが含まれます。

説明のアルゴリズムは非常に明示的であるため、コーディングは難しくありません。コードを表示する言語 (バイナリ セマフォを含む言語) を指定していれば、それを支援できたはずです! あなたは自分の本が何を求めているかを誤訳し、誤解しています。


もっと早く答えたかったのですが、タグをチェックするのを忘れていました。

于 2016-08-22T22:48:32.620 に答える