text: //===----------------------- random_shuffle.cpp ---------------------------===//
  //
  // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  // See https://llvm.org/LICENSE.txt for license information.
  // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  //
  //===----------------------------------------------------------------------===//
  
  #include "algorithm"
  #include "random"
  #ifndef _LIBCPP_HAS_NO_THREADS
  #   include "mutex"
  #   if defined(__ELF__) && defined(_LIBCPP_LINK_PTHREAD_LIB)
  #       pragma comment(lib, "pthread")
  #   endif
  #endif
  
  _LIBCPP_BEGIN_NAMESPACE_STD
  
  #ifndef _LIBCPP_HAS_NO_THREADS
  _LIBCPP_SAFE_STATIC static __libcpp_mutex_t __rs_mut = _LIBCPP_MUTEX_INITIALIZER;
  #endif
  unsigned __rs_default::__c_ = 0;
  
  __rs_default::__rs_default()
  {
  #ifndef _LIBCPP_HAS_NO_THREADS
      __libcpp_mutex_lock(&__rs_mut);
  #endif
      __c_ = 1;
  }
  
  __rs_default::__rs_default(const __rs_default&)
  {
      ++__c_;
  }
  
  __rs_default::~__rs_default()
  {
  #ifndef _LIBCPP_HAS_NO_THREADS
      if (--__c_ == 0)
         __libcpp_mutex_unlock(&__rs_mut);
  #else
      --__c_;
  #endif
  }
  
  __rs_default::result_type
  __rs_default::operator()()
  {
      static mt19937 __rs_g;
      return __rs_g();
  }
  
  __rs_default
  __rs_get()
  {
      return __rs_default();
  }
  
  _LIBCPP_END_NAMESPACE_STD
  