Does write only locking provide read correctness? I would’ve thought based
on the memory model it could cause issues?

https://golang.org/ref/mem#tmp_2


On Tue, Jan 5, 2021 at 19:40, K. Alex Mills <k.alex.mi...@gmail.com> wrote:

> That is the simplest and most conservative way go about it, but ultimately
> it depends on what you need out of your concurrency semantics.
>
> If you're willing to settle for a linearizable execution, you can gain
> some performance improvements by only checking the lock for write
> operations. So long as two write operations do not pass each other in the
> tree, they will be linearizable based on which write passed the root node
> first. Read operations can pass one another (and other write operations)
> freely. We can always pick a linearization point for them with respect to
> the rest of the concurrent write operations in the tree.
>
> You will also need to do hand-over-hand locking on your way down the tree
> to ensure no two writes can overtake one another.
>
> An approach like this can yield significant performance gains and you can
> formally show that the results you get are correct with regard to some
> actual state the tree could be in depending on when you consider each
> concurrent write to "complete".
>
> On Tue, Jan 5, 2021, 5:53 PM joseph.p...@gmail.com <
> joseph.p.mcguc...@gmail.com> wrote:
>
>> Is there a simple tree library that is thread safe?
>>
>> If I have to write one for myself, do I have to set locks on nodes as I
>> walk the tree to
>> prevent another thread from changing nodes that are 'above' me?
>>
>> --
>> 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.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/golang-nuts/6597198c-c439-4a1e-bff2-a2176204b272n%40googlegroups.com
>> <https://groups.google.com/d/msgid/golang-nuts/6597198c-c439-4a1e-bff2-a2176204b272n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
> --
> 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.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/CALJzkY-RSMPbObc-Dxhw985O9v_raMhGNwGcy03%3DKuWRTHeRmg%40mail.gmail.com
> <https://groups.google.com/d/msgid/golang-nuts/CALJzkY-RSMPbObc-Dxhw985O9v_raMhGNwGcy03%3DKuWRTHeRmg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CA%2Bc2dWfo9xk7X9roSbN_HAPV8HxxohryAvL1Hn-TP%3Dt7U%2BXXRA%40mail.gmail.com.

Reply via email to