[concurrency-interest] Queue quest

Stanimir Simeonoff stanimir at riflexo.com
Tue Apr 15 08:23:24 EDT 2014


If you can tolerate bulk drain(), i.e. "Collection<E> drain()" instead of
"E poll()" there is even a simpler implementation - using a stack and
reverse it on poll(). Although the stack would perform worse under
contention as the "head" is contended by both producers and the consumer,
yet the implementation is super simple.
http://pastebin.com/4FpvHPEy

I've been using bounded SC/MP queues/stacks with blocking on the consumer
for quite some time, hence the inclusion of park/unpark.

Stanimir




On Tue, Apr 15, 2014 at 2:04 PM, √iktor Ҡlang <viktor.klang at gmail.com>wrote:

> Alright, cool, I won't need that.
>
>
> On Tue, Apr 15, 2014 at 12:07 AM, Stanimir Simeonoff <stanimir at riflexo.com
> > wrote:
>
>> Park/Unpark is only for the consumer size if you specify timeout to wait
>> for an element. The producer never waits besides the CAS loop.
>>
>> Stanimir
>>
>>
>> On Tue, Apr 15, 2014 at 1:05 AM, √iktor Ҡlang <viktor.klang at gmail.com>wrote:
>>
>>> Hi Stanimir,
>>>
>>> It's really late here, but the presence of park/unpark tells me that
>>> this isn't non-blocking.
>>>
>>>
>>> On Mon, Apr 14, 2014 at 11:59 PM, Stanimir Simeonoff <
>>> stanimir at riflexo.com> wrote:
>>>
>>>>
>>>>
>>>>
>>>>
>>>>> On Mon, Apr 14, 2014 at 4:00 PM, Oleksandr Otenko <
>>>>> oleksandr.otenko at oracle.com> wrote:
>>>>>
>>>>>>  Yes, but capacity availability is tricky to define.
>>>>>>
>>>>>
>>>>> Absolutely, I am open to suggestions!
>>>>>
>>>>>
>>>> Here is an attempt with the described counter:
>>>> http://pastebin.com/fY1AudYY
>>>>
>>>> Basically it is a linked queue w/o CAS on the head due to single
>>>> consumer only, each node has an extra field *long counter *and the
>>>> current size is 1+tail.counter-head.counter.
>>>> poll(long nanos) may return spuriously as it doesn't bother with
>>>> measuring time. Usually that's ok for single consumer queues as they go
>>>> back to poll() if they don't have other tasks to do.
>>>>
>>>>
>>>>
>>>> Stanimir
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> Cheers,
>>>>>>
>>
>>
>
>
> --
> Cheers,
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cs.oswego.edu/pipermail/concurrency-interest/attachments/20140415/4b5c930f/attachment.html>


More information about the Concurrency-interest mailing list