Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::shared...:shared_lock(3) C++ Standard Libarystd::shared...:shared_lock(3)

NAME
       std::shared_lock::shared_lock - std::shared_lock::shared_lock

Synopsis
	  shared_lock()	 noexcept;					   (1)
       (since C++14)
	  shared_lock( shared_lock&& other )  noexcept;			   (2)
       (since C++14)
	  explicit  shared_lock(  mutex_type& m	);			   (3)
       (since C++14)
	  shared_lock( mutex_type& m, std::defer_lock_t	t )  noexcept;	   (4)
       (since C++14)
	  shared_lock(	mutex_type&  m,	std::try_to_lock_t t );		   (5)
       (since C++14)
	  shared_lock( mutex_type& m, std::adopt_lock_t	t  );		   (6)
       (since C++14)
	  template< class Rep, class Period >

	  shared_lock(	mutex_type&  m,					   (7)
       (since C++14)

	  const	std::chrono::duration<Rep,Period>& timeout_duration );
	  template< class Clock, class Duration	>

	  shared_lock( mutex_type&  m,					   (8)
       (since C++14)

	  const	std::chrono::time_point<Clock,Duration>& timeout_time );

	  Constructs a shared_lock, optionally locking the supplied mutex.

	  1) Constructs	a shared_lock with no associated mutex.
	  2)  Move  constructor. Initializes the shared_lock with the contents
       of other. Leaves
	  other	with no	associated mutex.
	  3-8) Constructs a shared_lock	with m as the associated mutex.	 Addi-
       tionally:
	  3)   Locks   the   associated	  mutex	 in  shared  mode  by  calling
       m.lock_shared().
	  4) Does not lock the associated mutex.
	  5) Tries to lock the associated mutex	in shared mode without	block-
       ing by calling
	  m.try_lock_shared().
	  6)  Assumes  the calling thread already holds	a shared lock (i.e., a
       lock acquired by
	  lock_shared,	    try_lock_shared,	  try_lock_shared_for,	    or
       try_lock_shared_until) on m.
	  The behavior is undefined if not so.
	  7) Tries to lock the associated mutex	in shared mode by calling
	  m.try_lock_shared_for(timeout_duration),  which  blocks until	speci-
       fied
	  timeout_duration has elapsed or  the	lock  is  acquired,  whichever
       comes first. May
	  block	for longer than	timeout_duration. The behavior is undefined if
       Mutex does not
	  meet the SharedTimedLockable requirements.
	  8) Tries to lock the associated mutex	in shared mode by calling
	  m.try_lock_shared_until(timeout_time),  which	blocks until specified
       timeout_time has
	  been reached or the lock is acquired,	 whichever  comes  first.  May
       block for longer
	  than	until timeout_time has been reached. The behavior is undefined
       if Mutex	does
	  not meet the SharedTimedLockable requirements.

Parameters
	  other		   - another shared_lock to initialize the state with
	  m		   - mutex to associate	with the lock  and  optionally
       acquire ownership
			     of
	  t		    -  tag  parameter used to select constructors with
       different locking
			     strategies
	  timeout_duration - maximum duration to block for
	  timeout_time	   - maximum time point	to block until

Example
       // Run this code

	#include <shared_mutex>
	#include <syncstream>
	#include <iostream>
	#include <thread>
	#include <chrono>

	std::shared_timed_mutex	m;
	int i =	10;

	void read_shared_var(int id)
	{
	   // both the threads get access to the integer i
	   std::shared_lock<std::shared_timed_mutex> slk(m);
	   const int ii	= i; //	reads global i

	   std::osyncstream(std::cout) << "#" << id << " read i	as " <<	ii  <<
       "...\n";
	   std::this_thread::sleep_for(std::chrono::milliseconds(10));
	   std::osyncstream(std::cout)	<<  "#"	 <<  id	 <<  "	woke up..." <<
       std::endl;
	}

	int main()
	{
	   std::thread r1 {read_shared_var, 1};
	   std::thread r2 {read_shared_var, 2};

	   r1.join();
	   r2.join();
	}

Possible output:
	#2 read	i as 10...
	#1 read	i as 10...
	#2 woke	up...
	#1 woke	up...

http://cppreference.com		  2022.07.31	 std::shared...:shared_lock(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::shared_lock::shared_lock&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help