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