![]() |
1
3
是
一个快速的补救办法是增加
请记住,事情发生的速度可能比预期的要快(即,在您有机会在几行之后增加FCount之前,用PostMessage发布的消息会被另一个线程捕获和处理),特别是当您处于真正的多线程环境(多个CPU)中时。这就是为什么我早些时候问“问题机器”是否有多个CPU/内核。
另一方面,在这样的生产者/消费者场景中可以做的一个很好的优化是使用两个队列而不是一个队列。当使用者醒来处理完整队列时,您可以将完整队列与空队列交换,只需锁定/处理完整队列,而新的空队列可以在两个线程不尝试锁定对方队列的情况下填充。不过,在交换这两个队列时仍然需要一些锁定。 |
![]() |
2
1
在检查队列大小和发出消息之前是否锁定了消息队列
看看你是否真的遇到了比赛情况,而不是比赛中的问题
顺便问一下,这台特定计算机的CPU或内核数量是否与您认为没有问题的其他计算机不同?有时,当您从单CPU机器切换到具有多个物理CPU/内核的机器时,可能会出现新的竞争条件或死锁。 |
![]() |
3
-1
|
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 2 年前 |