www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Non-blocking array queue.

reply Shammah Chancellor <anonymous coward.com> writes:
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.
Mar 08 2014
parent reply "Martin" <martinbbjerregaard gmail.com> writes:
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?
Mar 08 2014
parent reply Shammah Chancellor <anonymous coward.com> writes:
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.
Mar 08 2014
parent reply "Martin" <martinbbjerregaard gmail.com> writes:
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?
Mar 08 2014
parent Shammah Chancellor <anonymous coward.com> writes:
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?
Mar 08 2014