ホームページ 運用・保守 Linuxの運用と保守 Linuxの条件変数とセマフォの違いは何ですか

Linuxの条件変数とセマフォの違いは何ですか

May 11, 2022 pm 07:18 PM
linux

違い: 1. 条件変数を使用すると、すべてのウェイターを一度にウェイクアップできますが、セマフォはウェイクアップできません; 2. セマフォは常に値 (ステータス) を持ちますが、条件変数には値がなく、場所もありませんwait によって返されたシグナルの数を記録する場所がない; 3. セマフォの目的はプロセス間の同期であり、条件変数の目的はスレッド間の同期です。

Linuxの条件変数とセマフォの違いは何ですか

#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。

条件変数

条件変数 (cond) は、マルチスレッド プログラムで「待機 ---> ウェイクアップ」ロジックを実装するために使用されます。一般的に使用される方法は、プロセス間の同期メカニズムです。条件変数は、条件が満たされてトリガーされるまでスレッドをブロックするために使用されます。通常、条件変数とミューテックスは同時に使用されます。

一般に、条件変数には 2 つの状態があります:

(1) 1 つまたは複数のスレッドが「条件変数の条件が確立される」のを待って一時停止されます;

(2 ) 別のスレッドは、「条件変数の条件が true の場合」に他のスレッドに通知します。

条件変数の使用:

#include <pthread.h>

struct msg {
    struct msg *m_next;
    /* ... more stuff here ... */
};
struct msg *workq;
pthread_cond_t qready = PTHREAD_COND_INITIALIZER;
pthread_mutex_t qlock = PTHREAD_MUTEX_INITIALIZER;

void
process_msg(void)
{
    struct msg *mp;

    for (;;) {
        pthread_mutex_lock(&qlock);
        while (workq == NULL)
            pthread_cond_wait(&qready, &qlock);
        mp = workq;
        workq = mp->m_next;
        pthread_mutex_unlock(&qlock);
        /* now process the message mp */
    }
}

void
enqueue_msg(struct msg *mp)
{
    pthread_mutex_lock(&qlock);
    mp->m_next = workq;
    workq = mp;
    pthread_mutex_unlock(&qlock);
    pthread_cond_signal(&qready);
}
ログイン後にコピー

もちろん、条件変数をトリガーするときに次のコードを使用することもできます。どちらの方法にも独自の長所と短所があります

void
enqueue_msg(struct msg *mp)
{
    pthread_mutex_lock(&qlock);
    mp->m_next = workq;
    workq = mp;
    pthread_cond_signal(&qready);
    pthread_mutex_unlock(&qlock);
}
ログイン後にコピー

セマフォ

セマフォは、アクセスがアトミックである特別な変数です。

これに対して許可される操作は 2 つだけです:

(1) セマフォを待つ

セマフォ値が 0 の場合、プログラムは待機し、セマフォ値が大きい場合は待機します。 0 より大きい場合、セマフォは 1 減算され、プログラムは実行を続けます。

(2) セマフォを送信します。

セマフォの値に 1 を加えます。

注: Linux は、ヘッダー ファイル sys/sem.h で宣言された一連のセマフォ API を提供します。

Linux 条件変数とセマフォの違い:

(1) 条件変数を使用すると、すべてのウェイターを一度にウェイクアップでき、このセマフォは機能と感触の欠如が最大の違いです。

(2) セマフォは常に値 (ステータス) を持ちますが、条件変数にはそれがありません。何回目覚めた (信号を送信した) かを記録する場所はありません。ウェイクアップされた回数を記録する場所 (wait が返されます)。実装の観点から見ると、セマフォはミューテックス カウンタ条件変数を使用して実装できます。セマフォには状態があるため、正確な同期が必要な場合は、セマフォに特別な機能を持たせることができます。セマフォは、条件変数でウェイクアップが失われる問題を解決できます。

(3) セマフォの目的はプロセス間の同期であり、ミューテックスと条件変数の目的はスレッド間の同期ですが、セマフォはスレッド間でも使用でき、ミューテックスと条件変数も同期できます。間のプロセスで使用されます。実際の状況に基づいて決定を下す必要があります。セマフォの最も便利なシナリオは、利用可能なリソースの量を示すことです。

古典的な文:

ミューテックスはセマフォの特殊なケースであり、ミューテックスの本質はロックです。

関連する推奨事項: 「Linux ビデオ チュートリアル

以上がLinuxの条件変数とセマフォの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Deepseek Webバージョンの入り口Deepseek公式ウェブサイトの入り口 Deepseek Webバージョンの入り口Deepseek公式ウェブサイトの入り口 Feb 19, 2025 pm 04:54 PM

DeepSeekは、Webバージョンと公式Webサイトの2つのアクセス方法を提供する強力なインテリジェント検索および分析ツールです。 Webバージョンは便利で効率的であり、公式ウェブサイトは包括的な製品情報、ダウンロードリソース、サポートサービスを提供できます。個人であろうと企業ユーザーであろうと、DeepSeekを通じて大規模なデータを簡単に取得および分析して、仕事の効率を向上させ、意思決定を支援し、イノベーションを促進することができます。

DeepSeekをインストールする方法 DeepSeekをインストールする方法 Feb 19, 2025 pm 05:48 PM

DeepSeekをインストールするには、Dockerコンテナ(最も便利な場合は、互換性について心配する必要はありません)を使用して、事前コンパイルパッケージ(Windowsユーザー向け)を使用してソースからコンパイル(経験豊富な開発者向け)を含む多くの方法があります。公式文書は慎重に文書化され、不必要なトラブルを避けるために完全に準備します。

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

Bitget公式ウェブサイトのインストール(2025初心者ガイド) Bitget公式ウェブサイトのインストール(2025初心者ガイド) Feb 21, 2025 pm 08:42 PM

Bitgetは、スポット取引、契約取引、デリバティブなど、さまざまな取引サービスを提供する暗号通貨交換です。 2018年に設立されたこのExchangeは、シンガポールに本社を置き、安全で信頼性の高い取引プラットフォームをユーザーに提供することに取り組んでいます。 Bitgetは、BTC/USDT、ETH/USDT、XRP/USDTなど、さまざまな取引ペアを提供しています。さらに、この取引所はセキュリティと流動性について評判があり、プレミアム注文タイプ、レバレッジド取引、24時間年中無休のカスタマーサポートなど、さまざまな機能を提供します。

gate.ioインストールパッケージを無料で入手してください gate.ioインストールパッケージを無料で入手してください Feb 21, 2025 pm 08:21 PM

Gate.ioは、インストールパッケージをダウンロードしてデバイスにインストールすることで使用できる人気のある暗号通貨交換です。インストールパッケージを取得する手順は次のとおりです。Gate.ioの公式Webサイトにアクセスし、「ダウンロード」をクリックし、対応するオペレーティングシステム(Windows、Mac、またはLinux)を選択し、インストールパッケージをコンピューターにダウンロードします。スムーズなインストールを確保するために、インストール中に一時的にウイルス対策ソフトウェアまたはファイアウォールを一時的に無効にすることをお勧めします。完了後、ユーザーはGATE.IOアカウントを作成して使用を開始する必要があります。

OUYI OKXインストールパッケージが直接含まれています OUYI OKXインストールパッケージが直接含まれています Feb 21, 2025 pm 08:00 PM

世界をリードするデジタル資産交換であるOuyi Okxは、安全で便利な取引体験を提供するために、公式のインストールパッケージを開始しました。 OUYIのOKXインストールパッケージは、ブラウザに直接インストールでき、ユーザー向けの安定した効率的な取引プラットフォームを作成できます。インストールプロセスは、簡単で理解しやすいです。

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

OUYI Exchangeダウンロード公式ポータル OUYI Exchangeダウンロード公式ポータル Feb 21, 2025 pm 07:51 PM

OKXとしても知られるOUYIは、世界をリードする暗号通貨取引プラットフォームです。この記事では、OUYIの公式インストールパッケージのダウンロードポータルを提供します。これにより、ユーザーはさまざまなデバイスにOUYIクライアントをインストールすることが容易になります。このインストールパッケージは、Windows、Mac、Android、およびiOSシステムをサポートします。インストールが完了した後、ユーザーはOUYIアカウントに登録またはログインし、暗号通貨の取引を開始し、プラットフォームが提供するその他のサービスを楽しむことができます。

See all articles