mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	general: Use deducation guides for std::lock_guard and std::unique_lock
Since C++17, the introduction of deduction guides for locking facilities means that we no longer need to hardcode the mutex type into the locks themselves, making it easier to switch mutex types, should it ever be necessary in the future.
This commit is contained in:
		
							parent
							
								
									d5bcb45b2a
								
							
						
					
					
						commit
						21c71d21ae
					
				
					 21 changed files with 124 additions and 122 deletions
				
			
		|  | @ -16,22 +16,22 @@ DetachedTasks::DetachedTasks() { | |||
| } | ||||
| 
 | ||||
| void DetachedTasks::WaitForAllTasks() { | ||||
|     std::unique_lock<std::mutex> lock(mutex); | ||||
|     std::unique_lock lock{mutex}; | ||||
|     cv.wait(lock, [this]() { return count == 0; }); | ||||
| } | ||||
| 
 | ||||
| DetachedTasks::~DetachedTasks() { | ||||
|     std::unique_lock<std::mutex> lock(mutex); | ||||
|     std::unique_lock lock{mutex}; | ||||
|     ASSERT(count == 0); | ||||
|     instance = nullptr; | ||||
| } | ||||
| 
 | ||||
| void DetachedTasks::AddTask(std::function<void()> task) { | ||||
|     std::unique_lock<std::mutex> lock(instance->mutex); | ||||
|     std::unique_lock lock{instance->mutex}; | ||||
|     ++instance->count; | ||||
|     std::thread([task{std::move(task)}]() { | ||||
|         task(); | ||||
|         std::unique_lock<std::mutex> lock(instance->mutex); | ||||
|         std::unique_lock lock{instance->mutex}; | ||||
|         --instance->count; | ||||
|         std::notify_all_at_thread_exit(instance->cv, std::move(lock)); | ||||
|     }) | ||||
|  |  | |||
|  | @ -44,12 +44,12 @@ public: | |||
|     } | ||||
| 
 | ||||
|     void AddBackend(std::unique_ptr<Backend> backend) { | ||||
|         std::lock_guard<std::mutex> lock(writing_mutex); | ||||
|         std::lock_guard lock{writing_mutex}; | ||||
|         backends.push_back(std::move(backend)); | ||||
|     } | ||||
| 
 | ||||
|     void RemoveBackend(std::string_view backend_name) { | ||||
|         std::lock_guard<std::mutex> lock(writing_mutex); | ||||
|         std::lock_guard lock{writing_mutex}; | ||||
|         const auto it = | ||||
|             std::remove_if(backends.begin(), backends.end(), | ||||
|                            [&backend_name](const auto& i) { return backend_name == i->GetName(); }); | ||||
|  | @ -78,7 +78,7 @@ private: | |||
|         backend_thread = std::thread([&] { | ||||
|             Entry entry; | ||||
|             auto write_logs = [&](Entry& e) { | ||||
|                 std::lock_guard<std::mutex> lock(writing_mutex); | ||||
|                 std::lock_guard lock{writing_mutex}; | ||||
|                 for (const auto& backend : backends) { | ||||
|                     backend->Write(e); | ||||
|                 } | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ namespace Common { | |||
| class Event { | ||||
| public: | ||||
|     void Set() { | ||||
|         std::lock_guard<std::mutex> lk(mutex); | ||||
|         std::lock_guard lk{mutex}; | ||||
|         if (!is_set) { | ||||
|             is_set = true; | ||||
|             condvar.notify_one(); | ||||
|  | @ -24,14 +24,14 @@ public: | |||
|     } | ||||
| 
 | ||||
|     void Wait() { | ||||
|         std::unique_lock<std::mutex> lk(mutex); | ||||
|         std::unique_lock lk{mutex}; | ||||
|         condvar.wait(lk, [&] { return is_set; }); | ||||
|         is_set = false; | ||||
|     } | ||||
| 
 | ||||
|     template <class Duration> | ||||
|     bool WaitFor(const std::chrono::duration<Duration>& time) { | ||||
|         std::unique_lock<std::mutex> lk(mutex); | ||||
|         std::unique_lock lk(mutex); | ||||
|         if (!condvar.wait_for(lk, time, [this] { return is_set; })) | ||||
|             return false; | ||||
|         is_set = false; | ||||
|  | @ -40,7 +40,7 @@ public: | |||
| 
 | ||||
|     template <class Clock, class Duration> | ||||
|     bool WaitUntil(const std::chrono::time_point<Clock, Duration>& time) { | ||||
|         std::unique_lock<std::mutex> lk(mutex); | ||||
|         std::unique_lock lk{mutex}; | ||||
|         if (!condvar.wait_until(lk, time, [this] { return is_set; })) | ||||
|             return false; | ||||
|         is_set = false; | ||||
|  | @ -48,7 +48,7 @@ public: | |||
|     } | ||||
| 
 | ||||
|     void Reset() { | ||||
|         std::unique_lock<std::mutex> lk(mutex); | ||||
|         std::unique_lock lk{mutex}; | ||||
|         // no other action required, since wait loops on the predicate and any lingering signal will
 | ||||
|         // get cleared on the first iteration
 | ||||
|         is_set = false; | ||||
|  | @ -66,7 +66,7 @@ public: | |||
| 
 | ||||
|     /// Blocks until all "count" threads have called Sync()
 | ||||
|     void Sync() { | ||||
|         std::unique_lock<std::mutex> lk(mutex); | ||||
|         std::unique_lock lk{mutex}; | ||||
|         const std::size_t current_generation = generation; | ||||
| 
 | ||||
|         if (++waiting == count) { | ||||
|  | @ -80,7 +80,7 @@ public: | |||
|     } | ||||
| 
 | ||||
|     std::size_t Generation() const { | ||||
|         std::unique_lock<std::mutex> lk(mutex); | ||||
|         std::unique_lock lk(mutex); | ||||
|         return generation; | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -78,7 +78,7 @@ public: | |||
| 
 | ||||
|     T PopWait() { | ||||
|         if (Empty()) { | ||||
|             std::unique_lock<std::mutex> lock(cv_mutex); | ||||
|             std::unique_lock lock{cv_mutex}; | ||||
|             cv.wait(lock, [this]() { return !Empty(); }); | ||||
|         } | ||||
|         T t; | ||||
|  | @ -137,7 +137,7 @@ public: | |||
| 
 | ||||
|     template <typename Arg> | ||||
|     void Push(Arg&& t) { | ||||
|         std::lock_guard<std::mutex> lock(write_lock); | ||||
|         std::lock_guard lock{write_lock}; | ||||
|         spsc_queue.Push(t); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue