Thread overview
Non-blocking array queue.
Mar 08, 2014
Shammah Chancellor
Mar 08, 2014
Martin
Mar 08, 2014
Shammah Chancellor
Mar 08, 2014
Martin
Mar 08, 2014
Shammah Chancellor
March 08, 2014
Hi,

I'm interesting in implementing a non-blocking queue.   My thought is to use a fixed-size array, and increment back of the queue with a integer.   I was thinking I could make this non-blocking via an atomic increment operation before assigning the pushed value onto the queue.   So, my question is:   How would you do an atomic increment in a cross-platform way in D?


Thanks!
-S.

March 08, 2014
On Saturday, 8 March 2014 at 19:02:26 UTC, Shammah Chancellor wrote:
> Hi,
>
> I'm interesting in implementing a non-blocking queue.   My thought is to use a fixed-size array, and increment back of the queue with a integer.   I was thinking I could make this non-blocking via an atomic increment operation before assigning the pushed value onto the queue.   So, my question is:   How would you do an atomic increment in a cross-platform way in D?
>
>
> Thanks!
> -S.

I think you could use http://dlang.org/phobos/core_atomic.html, maybe?
March 08, 2014
On 2014-03-08 19:58:01 +0000, Martin said:

> On Saturday, 8 March 2014 at 19:02:26 UTC, Shammah Chancellor wrote:
>> Hi,
>> 
>> I'm interesting in implementing a non-blocking queue.   My thought is to use a fixed-size array, and increment back of the queue with a integer.   I was thinking I could make this non-blocking via an atomic increment operation before assigning the pushed value onto the queue.   So, my question is:   How would you do an atomic increment in a cross-platform way in D?
>> 
>> 
>> Thanks!
>> -S.
> 
> I think you could use http://dlang.org/phobos/core_atomic.html, maybe?

I didn't see a way to get an an increment operation.   atomicOp doesn't seem to offer unitary operations.

-S.

March 08, 2014
On Saturday, 8 March 2014 at 21:12:42 UTC, Shammah Chancellor wrote:
> On 2014-03-08 19:58:01 +0000, Martin said:
>
>> On Saturday, 8 March 2014 at 19:02:26 UTC, Shammah Chancellor wrote:
>>> Hi,
>>> 
>>> I'm interesting in implementing a non-blocking queue.   My thought is to use a fixed-size array, and increment back of the queue with a integer.   I was thinking I could make this non-blocking via an atomic increment operation before assigning the pushed value onto the queue.   So, my question is:   How would you do an atomic increment in a cross-platform way in D?
>>> 
>>> 
>>> Thanks!
>>> -S.
>> 
>> I think you could use http://dlang.org/phobos/core_atomic.html, maybe?
>
> I didn't see a way to get an an increment operation.   atomicOp doesn't seem to offer unitary operations.
>
> -S.

atomicOp!("+=")(value, 1);

Should work, I believe. Or is that not what you meant?
March 08, 2014
On 2014-03-08 21:16:36 +0000, Martin said:

> On Saturday, 8 March 2014 at 21:12:42 UTC, Shammah Chancellor wrote:
>> On 2014-03-08 19:58:01 +0000, Martin said:
>> 
>>> On Saturday, 8 March 2014 at 19:02:26 UTC, Shammah Chancellor wrote:
>>>> Hi,
>>>> 
>>>> I'm interesting in implementing a non-blocking queue.   My thought is to use a fixed-size array, and increment back of the queue with a integer.   I was thinking I could make this non-blocking via an atomic increment operation before assigning the pushed value onto the queue.   So, my question is:   How would you do an atomic increment in a cross-platform way in D?
>>>> 
>>>> 
>>>> Thanks!
>>>> -S.
>>> 
>>> I think you could use http://dlang.org/phobos/core_atomic.html, maybe?
>> 
>> I didn't see a way to get an an increment operation.   atomicOp doesn't seem to offer unitary operations.
>> 
>> -S.
> 
> atomicOp!("+=")(value, 1);
> 
> Should work, I believe. Or is that not what you meant?

I was considering using that, but in the channel I was told that would be inefficient assembly when it should normally be one operation?