Circular lock-free buffer

后端 未结 18 750
悲哀的现实
悲哀的现实 2020-11-29 15:00

I\'m in the process of designing a system which connects to one or more stream of data feeds and do some analysis on the data than trigger events based on the result. In a t

18条回答
  •  孤街浪徒
    2020-11-29 15:39

    There are situations that you don't need locking to prevent race condition, especially when you have only one producer and consumer.

    Consider this paragraph from LDD3:

    When carefully implemented, a circular buffer requires no locking in the absence of multiple producers or consumers. The producer is the only thread that is allowed to modify the write index and the array location it points to. As long as the writer stores a new value into the buffer before updating the write index, the reader will always see a consistent view. The reader, in turn, is the only thread that can access the read index and the value it points to. With a bit of care to ensure that the two pointers do not overrun each other, the producer and the consumer can access the buffer concurrently with no race conditions.

提交回复
热议问题