Skip to content

advanceClock和Flush间存在并发问题 #53

@M6ZeroG

Description

@M6ZeroG

timingwheel/timingwheel.go

Lines 147 to 149 in 54845bd

b := elem.(*bucket)
tw.advanceClock(b.Expiration())
b.Flush(tw.addOrRun)

考虑tw.advanceClock(b.Expiration())和b.Flush(tw.addOrRun)之间的窗口时间内,新的Timer被哈希到b且b.expiration发生变化的情况:
1、新的Timer会在Flush的for循环中被reinsert到和之前同样的、正在Flush的bucket,新的Timer会被处理链表的逻辑处理掉
2、即使新的Time没有被处理掉依然在bucket中,Flush完成后bucket的expiration会被置为-1,影响后续时间轮的正常运转

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions