C++20 二进制信号量超过最大值

问题描述 投票:0回答:0

我不明白 C++20 中计数信号量和二进制信号量之间的区别(或者有一个错误)。我能理解这个想法,但它们的工作原理相同,没有区别。我可以多次释放二进制信号量,然后多次获取并且它不会阻塞(尽管返回的最大值为 1)。

#include <iostream>
#include <semaphore>

int main(int argc, char ** argv)
{
    std::binary_semaphore sem{0};
    std::cout << sem.max() << std::endl;
    
    sem.release();
    sem.release();
    
    sem.acquire();
    sem.acquire();

    return 0;
}

编译:

g++-11 -O0 -std=c++20 bin_semaphore.cpp -o sem.out

出:

1
并返回。

我认为它应该永远锁定,但事实并非如此。有人可以解释这种行为吗?

multithreading c++20 semaphore binary-semaphore
© www.soinside.com 2019 - 2024. All rights reserved.