ホームページ  >  記事  >  バックエンド開発  >  C++ マルチスレッド プログラミングにおけるロックの種類と用途は何ですか?

C++ マルチスレッド プログラミングにおけるロックの種類と用途は何ですか?

WBOY
WBOYオリジナル
2024-06-01 09:31:57802ブラウズ

C++ マルチスレッド プログラミングのロックの種類は次のとおりです。 ミューテックス ロック: 一度に 1 つのスレッドのみが共有リソースにアクセスできるようにします。 読み取り/書き込みロック: 複数のスレッドが同時に共有リソースを読み取ることを許可します。スピン ロック: ロックが使用可能になるまで待機することを避けるために、ロックのステータスを常にチェックします。 C++ マルチスレッド プログラミングにおけるロックの種類と目的

C++ 多线程编程中的锁的类型和用途有哪些?

Lock

はマルチスレッド プログラミングで使用され、共有リソースへのスレッド アクセスを調整するための重要なツールです。 C++ にはいくつかの種類のロックがあり、それぞれに独自の目的があります。

1. ミューテックス ロック (Mutex)

ミューテックス ロックは最も基本的なロック タイプで、一度に 1 つのスレッドのみがクリティカル セクション (共有リソース) にアクセスできます。

// 创建一个互斥锁
std::mutex mtx;

// 获取互斥锁(线程等待直到锁可用)
mtx.lock();

// 使用临界区
// ...

// 释放互斥锁(允许其他线程获取锁)
mtx.unlock();

2. 読み取り/書き込みロック (RWLock)

読み取り/書き込みロックを使用すると、複数のスレッドが共有リソースを同時に読み取ることができますが、一度に書き込むことができるのは 1 つのスレッドのみです。

// 创建一个读写锁
std::shared_timed_mutex rwmtx;

// 获取读锁(线程可以在其他线程读取时读取)
rwmtx.lock_shared();

// 获取写锁(线程必须独占访问共享资源)
rwmtx.lock();

// 读取或写入临界区
// ...

// 释放锁
rwmtx.unlock();
rwmtx.unlock_shared();

3. スピンロック (スピンロック)

スピン ロックはミューテックス ロックに似ていますが、ロックが利用できない場合、スピン ロックは待機するのではなく、ロックのステータスを継続的にチェックします。

// 创建一个自旋锁
std::atomic_flag spinlock = ATOMIC_FLAG_INIT;

// 获取自旋锁
while (spinlock.test_and_set(std::memory_order_acquire));

// 使用临界区
// ...

// 释放自旋锁
spinlock.clear(std::memory_order_release);

4. 条件変数

条件変数は、特定の条件が満たされるのを待つために使用されます。これは、ミューテックス ロックと組み合わせて使用​​され、条件が満たされない場合にスレッドを待機させ、スレッドをウェイクアップして実行を継続できるようにします。

// 创建一个条件变量
std::condition_variable cv;

// 获取互斥锁
std::mutex mtx;
mtx.lock();

// 等待条件满足
cv.wait(mtx);

// 执行被唤醒后的操作
// ...

// 释放互斥锁
mtx.unlock();

実践例

スレッドセーフなキューを含むアプリケーションを考えてみましょう。キュー構造には、キュー操作を保護するミューテックスが含まれています。

class Queue {
    private:
        std::queue<int> queue;
        std::mutex mtx;
    public:
        void push(int value) {
            std::lock_guard<std::mutex> lock(mtx);
            queue.push(value);
        }

        int pop() {
            std::lock_guard<std::mutex> lock(mtx);
            int value = queue.front();
            queue.pop();
            return value;
        }
};

マルチスレッド環境では、ミューテックスにより、一度に 1 つのスレッドのみがキューにアクセスできるようになり、データ競合やキューの破損が防止されます。

以上がC++ マルチスレッド プログラミングにおけるロックの種類と用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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