@rog Thanks! Three-value slice operator was a very nice hint.

The original intention was to implement a buffer-pool (pool of []byte) 
without fragmenting the memory. But I was not sure if I was doing it right.

Seems now, assuming the pool consumers are polite goroutines, this can be a 
good solution. The pool will be used in a TCP server.

On Monday, April 23, 2018 at 6:23:09 PM UTC+4:30, rog wrote:
>
> You original example has a problem that others have pointed out because 
> it's possible for one goroutine to step on the part of the backing array 
> used 
> by others. In principle though your technique looks OK to me as long 
> as you prevent that happening, for example by using the three-value slice 
> operator to set the capacity as well as the length of the bucket items. 
>
> https://play.golang.org/p/vzQlULC1zs7 
>
> It's OK to read and write items of the same underlying array as long 
> as any given element of the array is only accessed by a single goroutine 
> (or appropriate synchronisation is used). 
>
>
> On 23 April 2018 at 10:38, Kaveh Shahbazian <kaveh.sh...@gmail.com 
> <javascript:>> wrote: 
> > Also -race does not complain about this: 
> > https://play.golang.org/p/IeA4npcemf5 
> > 
> > 
> > On Monday, April 23, 2018 at 10:51:05 AM UTC+4:30, Kaveh Shahbazian 
> wrote: 
> >> 
> >> @Silviu The code is mutating same item from two goroutines. While the 
> >> original target is to create a buffer pool that their items is not 
> being 
> >> mutated from two goroutines - actually they can not do that because at 
> a 
> >> specific time only one goroutine has access to one buffer. 
> >> 
> >> @Tamas Regarding "If there's no uncoordinated write and read/write of 
> the 
> >> same slot, then it's race-free", is it safe to use slices with a shared 
> >> underlying array, to be mutated from different goroutine? Every 
> goroutine 
> >> has access to one slice and that slice is only accessible to that one 
> >> goroutine - until the goroutine is done and returns the slice to the 
> pool. 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "golang-nuts" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an 
> > email to golang-nuts...@googlegroups.com <javascript:>. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to