Re: is HB consistent with SO for not otherwise related synchronization actions?

Alex Otenko via Concurrency-interest <[email protected]> Wed, 3 Feb 2021 08:13:31 +0000
Newsgroups gmane.comp.java.jsr.166-concurrency
Message-ID <CANkgWKgZLCrH17+nkaagUt1=VCUsvu8hVEYDbuoJTWghaqYr5A@mail.gmail.com>
What you are describing is the definition of the closure of po and sw
consistent with so, which is hb.

Alex

On Wed, 3 Feb 2021, 01:39 Valentin Kovalenko via Concurrency-interest, <
[email protected]> wrote:

> I believe, I found how to formally prove this.
>
> Same thread.
> If hb(wx, wy) and the actions wx, wy are performed by the same thread,
> then we have so(wx, wy) trivially due to both so and hb being consistent
> with the program order (po).
>
> Different threads.
> A more interesting situation is when wx and wy are performed by different
> threads, let us label them X and Y respectively. The only way to have a
> happens-before relation between actions performed by different threads X
> and Y is to have a synchronizes-with relation between a pair of
> synchronization actions in these threads. In other words, given hb(wx, wy),
> the execution must have actions releaseX performed by X and acquireY
> performed by Y, such that synchronizes-with(releaseX, acquireY) and
> po(wx, releaseX), po(acquireY, wy).
>
> Now we can see that hb(wx, wy) necessary leads to so(wx, releaseX),
> sw(releaseX, acquireY), so(acquireY, wy); and sw(releaseX, acquireY)
> necessary means so(releaseX, acquireY).
> Therefore, hb(wx, wy) necessary leads to so(wx, releaseX), so(releaseX,
> acquireY), so(acquireY, wy), which gives so(wx, wy).
>
> I would highly appreciate it if someone could confirm this reasoning.
>
> Regards,
> Valentin www.kovalenko.link
>
>
> On Tue, Feb 2, 2021 at 5:53 PM Valentin Kovalenko <
> [email protected]> wrote:
>
>> Hi all,
>>
>> Imagine that we have only partial information about an execution (as is
>> almost always true in practice):
>> there are synchronization actions wx and wy such that happens-before(wx,
>> wy). These actions are not otherwise explicitly related, we may think of
>> them as being volatile writes to two different variables x and y.
>>
>> According to JMM, they are also ordered with the total synchronization
>> order. The order so(wx, wy) is a possibility that clearly does not violate
>> any JMM constraints. Interestingly, so(wy, wx) also does not seem to
>> violate anything, and, thus, should also be allowed.
>>
>> However, if I try to imagine a program that produces executions with
>> hb(wx, wy) and so(wy, wx) - I fail miserably. Whatever I imagine is needed
>> to have hb(wx, wy) in an execution, causes this execution to have so(wx,
>> wy).
>>
>> So maybe happens-before order is always consistent with the
>> synchronization order (if this is not the case, could someone come up with
>> a counterexample)? If this is the case, is there a way to formally deduce
>> it from JMM without resorting to the argument "I can't imagine a program
>> that produces executions with hb not being consistent with so"?
>>
>> Thank you,
>> Valentin www.kovalenko.link
>>
> _______________________________________________
> Concurrency-interest mailing list
> [email protected]
> http://cs.oswego.edu/mailman/listinfo/concurrency-interest
>

_______________________________________________
Concurrency-interest mailing list
[email protected]
http://cs.oswego.edu/mailman/listinfo/concurrency-interest