libgo
libgo copied to clipboard
channel::TimedPop 概率丢数据
noTimeoutLock 上锁后,尝试wakeup协程,这时候,可能协程正好超时唤醒了,wakup调用失败,没有更新数据。 也就是timedpop调用返回了true, 但是数据并没有取回。
暂时解决办法: 把noTimeoutLock 上锁逻辑移动到Processer::Wakeup的回调函数中。
noTimeoutLock 上锁后,尝试wakeup协程,这时候,可能协程正好超时唤醒了,wakup调用失败,没有更新数据。 也就是timedpop调用返回了true, 但是数据并没有取回。
暂时解决办法: 把noTimeoutLock 上锁逻辑移动到Processer::Wakeup的回调函数中。