Is core.internal.atomic.atomicFetchAdd implementation really lock free?
claptrap
clap at trap.com
Sat Dec 3 13:05:44 UTC 2022
On Saturday, 3 December 2022 at 03:42:01 UTC, max haughton wrote:
> On Wednesday, 30 November 2022 at 00:35:55 UTC, claptrap wrote:
>> On Wednesday, 30 November 2022 at 00:16:00 UTC, rikki
>> cattermole wrote:
>>> On 30/11/2022 1:12 PM, H. S. Teoh wrote:
>>>> Hmm, that's weird that the docs would say that. I've always
>>>> been under
>>>> the impression that core.atomic ops use locks to achieve
>>>> atomicity.
>>>
>>> No its correct.
>>>
>>> As long as the hardware supports atomic operations, it'll use
>>> those instructions. It does have a fallback to use a mutex if
>>> need be though, which might be where you got that idea from.
>>
>> It really shouldn't do that IMO. People expect atomic ops to
>> be lock-free, it should be compile error if it cant be so.
>
> I expect atomic ops to provide correct memory consistency, and
> preferably be atomic where the platform allows it.
I am really hoping that "preferably atomic" was just a poor
choice or words.
I guess regarding the other issues I still think of atomic ops in
terms of what the cpu does, so a high level wrapper around them
that takes a lock is the complete antithesis to what is actually
desired.
I mean the whole point of atomic ops is to be able to avoid using
locks.
And if you look at the phobos docs...
"Atomically adds mod to the value referenced by val and returns
the value val held previously. This operation is both lock-free
and atomic."
https://dlang.org/library/core/atomic/atomic_fetch_add.html
More information about the Digitalmars-d
mailing list