![]() |
1
1
|
![]() |
2
1
你的问题是
你的工作线程超过了你的主线程。所以通知发生在主线程之前。 这只是您真正问题的一个症状;您使用的条件变量是错误的。除非是非常高级的使用,否则条件变量的所有使用都应该是三重的。
您的代码缺少有效负载。 为了发出信号,你:
听你说:
有微小的变化
遵循这种货物崇拜模式很重要,因为它避免了许多陷阱。它处理两个虚假的唤醒和通知后的等待。 您的代码缺少有效负载。因此,您的代码既易受等待线程超过信令线程的攻击,也易受虚假唤醒的攻击。 注意,在这里变得“聪明”是非常不鼓励的。例如,决定“我将使用一个原子变量来避免在发信号时使用互斥量”实际上是行不通的。要么按照上面的方法教条行事,要么花几个月时间好好学习C++的线程和内存模型,以便即兴发挥。 |
![]() |
3
-1
例如,没有像windows api这样的状态。你的问题是新的线索
|
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 2 年前 |