我不明白 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
并返回。
我认为它应该永远锁定,但事实并非如此。有人可以解释这种行为吗?