[libcxx-commits] [PATCH] D113069: [libcxx][SystemZ][z/OS] Update libcxx/src/random_shuffle.cpp to accommodate POSIX(OFF)

Daniel McIntosh via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Thu Nov 4 19:31:41 PDT 2021


DanielMcIntosh-IBM added inline comments.


================
Comment at: libcxx/src/random_shuffle.cpp:28
 #ifndef _LIBCPP_HAS_NO_THREADS
+  if (__libcpp_are_threads_enabled())
     __libcpp_mutex_lock(&__rs_mut);
----------------
Quuxplusone wrote:
> jroelofs wrote:
> > should this guard go inside `__libcpp_mutex_{,un}lock` instead?
> (This function comes from parent revision D110349)
> FWLIW, I think yes it should.
I had considered doing that, but don't think it's a good idea because 
1. it would result in a small performance hit in a lot of places
2. since `cxa_guard` (which manages initialization of static local variables) uses `__libcpp_mutex_{,un}lock`, it would cause infinite recursion (`__libcpp_mutex_{,un}lock` -> `__libcpp_is_threading_api_enabled()` -> `cxa_guard` -> `__libcpp_mutex_{,un}lock`). This loop could be broken by getting rid of the static local variable in `__libcpp_is_threading_api_enabled()`, but I think that is a significantly worse option. Also, getting rid of the static local variable makes the performance hit in 1) a lot bigger


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D113069



More information about the libcxx-commits mailing list