作为 C++ 并发练习,我想使用信号量按顺序打印字母 A B C。这是我的代码:
binary_semaphore sem[] = { binary_semaphore(1), binary_semaphore(0), binary_semaphore(0) };
int cnt = 0;
void func(int c) {
while (true) {
sem[c].acquire();
printf("%c ", c + 'A');
// if (++cnt == 10) {
// break;
// }
sem[(c + 1) % 3].release();
}
}
int main() {
vector<thread> pool;
for (int i = 0; i < 3; i++) {
pool.push_back(thread(func, i));
}
for (auto& t : pool) {
t.join();
}
return 0;
}
它有效。但奇怪的是,如果我启用这三个注释行
if (++cnt == 10) {
break;
}
有些东西似乎被阻塞了,什么也没有打印出来。
任何人都可以给我一些提示,这些线如何使信号量损坏?谢谢。