[libcxx-commits] [PATCH] D68480: Implementation of C++20's P1135R6 for libcxx

Valery Mironov via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Fri Oct 14 12:55:46 PDT 2022


MBkkt added inline comments.


================
Comment at: libcxx/src/atomic.cpp:38
+    static constexpr timespec __timeout = { 2, 0 };
+    syscall(SYS_futex, __ptr, FUTEX_WAIT_PRIVATE, __val, &__timeout, 0, 0);
+}
----------------
__simt__ wrote:
> MBkkt wrote:
> > Why do you use timed wait here?
> > It's strange, and also different with macos(ulock) behavior 
> Because it would be incorrect otherwise.
> 
> There's an infinitesimal but not zero probability that the serial number being waited on can roll over, incremented by precisely the right value, and then you might think it didn't change when it did.
> 
> There are a lot of weird discussions we could have from here. Does this negate Futex? I don't think it should. Is it even worth worrying about (like, the computer might be hit by a neutron flying in from space much more often than this)? I think it's cheap to mitigate.
> 
> There's a judgement-call here about how long to wait. It's arbitrary.
> 
> We wouldn't need to do this if Linux supported 64-bit Futex. Partly because we would rarely use serial numbers like this, and also partly because 64-bit numbers don't roll over inside of the useful life span of computer hardware.
First of thanks for answer.

But if I understand correctly it's only about not atomic<int> behavior (any atomic which use waiter pool)
So for atomic<int> it's not needed (also why unsigned int not used in wait without waiter pool?)

Another thought, for ulock behavior should be same?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D68480/new/

https://reviews.llvm.org/D68480



More information about the libcxx-commits mailing list