FreeBASIC マニュアルのトップに戻る

FreeBASIC ProPgMtCriticalSections

目次→教本→プログラマーのための案内Critical Sections←オリジナル・サイト

危険領域(Critical Sections) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

他のスレッドとの並行性を処理するための 危険領域(Critical Sections) で、組み込み手続きを適切に使います。

序文:
危険領域(Critical Section)は、原子動作(atomic action)として実行する必要がある、マルチス-レッド・プログラムの一部です(同様の動作を行う他のスレッドとの同時性はありません):
- これは、アクセスの相互排除を必要とする、プログラムの一部です。
- 通常、危険領域(Critical Section)は、複数の同時アクセスを許可しない、データ構造、周辺機器、ネットワーク接続などの、共有リソースにアクセスします。

プログラムが起動すると、すぐに 1つのスレッドが実行を開始します。
これは通常、プログラムの「メイン」スレッドと呼ばれます。プログラムの開始時に実行されるスレッドだからです:
- これは、ユーザーが、他の「子」スレッドを生成するスレッドです(スレッドは他の「サブ-子」スレッドを生成する場合もあります)。
- 多くの場合、これは、さまざまなシャットダウン動作を実行するため、実行を終了する最後のスレッドである必要があります(「子」スレッドは、最終的に生成される「サブ子」スレッドに関しても、そうする必要があります)。
- しかし、それ以外にも、ユーザーが明示的に生成した他のすべてのスレッドと(独自の危険領域(Critical Sections)と)競合することができます。

基本的なアルゴリズム
FreeBASIC が提供する、組み込み手続きを使って、スレッドに適用される、非同期または同期のアルゴリズムで、危険領域(Critical Section)の、排他的使用を保証する方法を、設計できます。

次の2つの例では、共有リソースは、入/出力ディスプレイデバイスです:
- 6つのユーザー・スレッドごとに、カウンターを出力します(フラグ 'quit' を読み取ります)。
- メイン・スレッドのキー-押し(何か)を取得します(そうなら、フラグ 'quit''true' に設定)。

出力手続き('Sub Counter()')は、重要なセクションの実行間に、重複がないことを徹底的に確認するために、カーソルの配置と印刷の間で自発的にテンポを持ちます。また、重要なセクションの実行の間に重複がないことを徹底的にチェックするために、終了前に行の中央にテキスト・カーソルを再配置します。
(逆に、相互除外処理専用のコードを削除すると、結果を見ることができます)。
各スレッド・ループの終わりに、異なるテンポ値が設定されます(小さい方から大きい方へ)。
構造(UDT)は、スレッドに必要なすべての変数を、グループ化します。
各 UDT インスタンスへのポインタは、作成フェーズで(threadcreate を使って)各スレッドに渡されます。

参照
プログラマーのための案内に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2023-05-02 06:23:12
日本語翻訳:WATANABE Makoto、原文著作者:fxm

ホームページのトップに戻る

表示-非営利-継承