二进制信号量和互斥量之间是否存在差异,或它们基本相同?
下面的代码片段无法编译。我尝试了不同的初始化程序,但无法编译。
\n#include <array>\n#include <semaphore>\n\n\nint main()\n{\n std::array<std::binary_semaphore, 4> semaphores { {0}, {0}, {0}, {0} };\n auto& [ lock1, lock2, lock3, lock4 ] { semaphores };\n}\nRun Code Online (Sandbox Code Playgroud)\n这是错误消息:
\n#include <array>\n#include <semaphore>\n\n\nint main()\n{\n std::array<std::binary_semaphore, 4> semaphores { {0}, {0}, {0}, {0} };\n auto& [ lock1, lock2, lock3, lock4 ] { semaphores };\n}\nRun Code Online (Sandbox Code Playgroud)\n难道不能声明一个binary_semaphores 数组吗?正确的语法是什么?
因此,我尝试在 Visual Studio 2019 和 2022 中使用counting_semaphore,但我得到的只是“std 没有成员counting_semaphore”。
在各个组件中添加 clang 11 后,我在 Visual Studio 2019 中进行了尝试,但仍然遇到相同的错误。然后我就想,好吧,它不支持 C++20。所以我想也许这就是它不起作用的原因。
然后我看到Vs2022 Preview支持C++20。所以我安装了它,包括在内,但我仍然无法执行“std::counting_semaphore<5> slot(5);” 正如它所说,std 没有一个名为计数信号量的成员。
我还在 2022 年预览安装程序的各个组件中安装了 clang12,但仍然无法正常工作。
我不确定我做错了什么。
我在网上看到例子:
https://www.modernnescpp.com/index.php/semaphores-in-c-20 https://en.cppreference.com/w/cpp/thread/counting_semaphore
告诉如何使用它,但是当我将代码放入 vs 中时,它不起作用。
我可以在#include 上“查看代码”,它显示了counting_semaphore 的实现,但我无法使用它!
请有人澄清我做错了什么!