マルチスレッド同時実行 - STL に基づくセマフォ (semaphore)

1. OSが提供するセマフォの違い

1. オペレーティング システムが提供するセマフォの違い
2. C++20 が提供するセマフォは、同じプロセス間のスレッド同期にのみ使用できます

2、C++20 セマフォ

セマフォは、共有リソースへの同時アクセスを制限するために使用される軽量の同期プリミティブです。両方を使用できる場合、セマフォは条件変数よりも効率的です。

プロジェクト 価値
counting_semaphore(C++20) counting_semaphore(C++20)
バイナリ_セマフォ(C++20) バイナリ_セマフォ(C++20)

1. 環境構成:
a. ヘッダー ファイルで定義
b. Visual Studio を 2019 にアップグレード
c. C++20 サポートのスイッチをオンにする

2. 使用例

#include <iostream>
#include <semaphore>
#include <thread>
using namespace std;

std::counting_semaphore<3> csem(0);

binary_semaphore bsem(0);

// semaphore release = condition_variable notify
// semaphore acquire = condition_variable wait
void task()
{
    
    
    cout << "task:ready to recv signal \n";
    csem.acquire();
    cout << "task:acquire end\n";
}
int main()
{
    
    
    thread t0(task);
    thread t1(task);
    thread t2(task);
    thread t3(task);
    thread t4(task);

    cout << "main:ready to signal :release\n";
    csem.release(3);
    cout << "main: signal end\n";

    t0.join();
    t1.join();
    t2.join();
    t3.join();
    t4.join();
}

間違いや不足がある場合は、コメントやご指摘をお待ちしております。作成は簡単ではありませんので、転載の際は出典を明記してください。お役に立ちましたら、ぜひ「いいね」とフォローをお願いいたします (⊙o⊙)
詳細については、私の個人ブログをフォローしてください: https://blog.csdn.net/qq_43148810

おすすめ

転載: blog.csdn.net/qq_43148810/article/details/130646633