Re: [dpdk-dev] release/acquire memory barriers and ring
On 13-Feb-18 7:37 PM, Alex Kiselev wrote: Hi. I've been wondering should I use a release/acquire memory barrier pair in order to be sure that the other thread will see the fully/corrected initialized object passed to it via a dpdk ring or ring itself is a kind of barrier? Let's say I have a pseudo code: Thread1: obj = alloc(); ... obj initialization ... ??? fence(memory_order_release); ??? rte_ring_sp_enqueue(ring, obj) Thread2: ??? fence(memory_order_acquire); ??? rte_ring_sc_dequeue(ring, obj) Should I use fences in that code? Thanks. -- Alex Rings do that automatically, no additional fences needed. -- Thanks, Anatoly
Re: [dpdk-dev] release/acquire memory barriers and ring
On Tue, 13 Feb 2018 22:37:37 +0300 Alex Kiselev wrote: > Hi. > > I've been wondering should I use a release/acquire memory barrier pair > in order to be sure that the other thread will see the fully/corrected > initialized object > passed to it via a dpdk ring or ring itself is a kind of barrier? > > Let's say I have a pseudo code: > > Thread1: > obj = alloc(); > ... > obj initialization > ... > > ??? fence(memory_order_release); ??? > rte_ring_sp_enqueue(ring, obj) > > > Thread2: > ??? fence(memory_order_acquire); ??? > rte_ring_sc_dequeue(ring, obj) > > Should I use fences in that code? > > Thanks. > > -- > Alex Not necessary. Enqueue/dequeue has necessary ordering; it is built on compare-exchange which has implied barrier.
Re: [dpdk-dev] release/acquire memory barriers and ring
I am sorry. I should've posted to the user list of couse. My mistake. 2018-02-13 22:37 GMT+03:00 Alex Kiselev : > Hi. > > I've been wondering should I use a release/acquire memory barrier pair > in order to be sure that the other thread will see the fully/corrected > initialized object > passed to it via a dpdk ring or ring itself is a kind of barrier? > > Let's say I have a pseudo code: > > Thread1: > obj = alloc(); > ... > obj initialization > ... > > ??? fence(memory_order_release); ??? > rte_ring_sp_enqueue(ring, obj) > > > Thread2: > ??? fence(memory_order_acquire); ??? > rte_ring_sc_dequeue(ring, obj) > > Should I use fences in that code? > > Thanks. > > -- > Alex
[dpdk-dev] release/acquire memory barriers and ring
Hi. I've been wondering should I use a release/acquire memory barrier pair in order to be sure that the other thread will see the fully/corrected initialized object passed to it via a dpdk ring or ring itself is a kind of barrier? Let's say I have a pseudo code: Thread1: obj = alloc(); ... obj initialization ... ??? fence(memory_order_release); ??? rte_ring_sp_enqueue(ring, obj) Thread2: ??? fence(memory_order_acquire); ??? rte_ring_sc_dequeue(ring, obj) Should I use fences in that code? Thanks. -- Alex