Semáforo (semáforo) baseado em STL de simultaneidade multiencadeada

1. A diferença entre os semáforos fornecidos pelo sistema operacional

1. A diferença entre os semáforos fornecidos pelo sistema operacional
2. Os semáforos fornecidos pelo c++20 só podem ser usados ​​para sincronização de threads entre o mesmo processo

Dois, semáforo c++20

Um semáforo é um primitivo de sincronização leve usado para restringir o acesso simultâneo a recursos compartilhados. Semáforos podem ser mais eficientes do que variáveis ​​de condição quando ambos podem ser usados.

projeto Valor
count_semaphore(C++20) count_semaphore(C++20)
binary_semaphore(C++20) binary_semaphore(C++20)

1. Configuração do ambiente:
a. Definido no arquivo de cabeçalho
b. O Visual Studio foi atualizado para 2019
c. Ative a opção de suporte a c++20

2. Exemplo de uso

#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();
}

Se houver algum erro ou deficiência, seja bem-vindo para comentar e apontar! A criação não é fácil, indique a fonte para reimpressão. Se for útil, lembre-se de curtir e seguir (⊙o⊙)
Para mais conteúdo, siga meu blog pessoal: https://blog.csdn.net/qq_43148810

Acho que você gosta

Origin blog.csdn.net/qq_43148810/article/details/130646633
Recomendado
Clasificación