From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Andres Freund <andres(at)anarazel(dot)de> |
Cc: | pgsql-hackers(at)lists(dot)postgresql(dot)org, Noah Misch <noah(at)leadboat(dot)com> |
Subject: | Re: valgrind versus pg_atomic_init() |
Date: | 2020-06-17 03:47:58 |
Message-ID: | 1416276.1592365678@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Andres Freund <andres(at)anarazel(dot)de> writes:
> On June 16, 2020 8:24:29 PM PDT, Noah Misch <noah(at)leadboat(dot)com> wrote:
>> Suppose the initializing process does:
>>
>> pg_atomic_init_u64(&somestruct->atomic, 123);
>> somestruct->atomic_ready = true;
>>
>> In released versions, any process observing atomic_ready==true will
>> observe
>> the results of the pg_atomic_init_u64(). After the commit from this
>> thread,
>> that's no longer assured.
> Why did that hold true before? There wasn't a barrier in platforms already (wherever we know what 64 bit reads/writes have single copy atomicity).
I'm confused as to why this is even an interesting discussion. If the
timing is so tight that another process could possibly observe partially-
initialized state in shared memory, how could we have confidence that the
other process doesn't look before we've initialized the atomic variable or
spinlock at all?
I think in practice all we need depend on in this area is that fork()
provides a full memory barrier.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Noah Misch | 2020-06-17 04:01:21 | Re: valgrind versus pg_atomic_init() |
Previous Message | Andres Freund | 2020-06-17 03:35:58 | Re: valgrind versus pg_atomic_init() |