On Thu, Dec 26, 2013 at 4:32 PM, Daniel Micay <danielmi...@gmail.com> wrote:
> On Thu, Dec 26, 2013 at 4:19 PM, comex <com...@gmail.com> wrote:
>> On Thu, Dec 26, 2013 at 8:48 PM, Daniel Micay <danielmi...@gmail.com> wrote:
>>> Acquiring and releasing a mutex when there's low contention takes two
>>> atomic operations. Switching to a linked data structure adds far more
>>> overhead than an extra atomic operation.
>>> [...]
>>> A simple array-backed circular buffer has a tiny lock scope, so it
>>> won't ever have high contention. In a less simple case, a mutex will
>>> spin for a bit before falling back to a `futex` system call.
>>
>> Fair enough, but why do you assume a lock-free queue is a linked data
>> structure?  A simple (bounded) array-backed circular buffer can be
>> lock-free too and then there are zero atomic operations.
>
> Lock-free data structures use atomic operations... you're doing at
> least one atomic operation or you won't have consistency between
> threads. An atomic operation will result in cache synchronization and
> stall the CPU pipeline. On an architecture with a weaker memory model
> (not x86), it might not have to stall the pipeline as much if you use
> a weaker ordering.

Anyway, I think there's a misunderstanding in this thread of what
locking is. A blocking queue is by definition not lock-free/wait-free,
since the wait is known as a lock. It can be done via a spin lock, a
system call like `futex` or the mix used by Linux mutexes but it's a
lock by any other name.
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to