mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2025-07-02 15:55:30 +00:00
Properly add RWMutex
This commit is contained in:
parent
747e948339
commit
7ab37b7fe9
20
include/RWMutex.h
Normal file
20
include/RWMutex.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Author: lionkor
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/*
|
||||||
|
* An RWMutex allows multiple simultaneous readlocks but only one writelock at a time,
|
||||||
|
* and write locks and read locks are mutually exclusive.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <shared_mutex>
|
||||||
|
|
||||||
|
// Use ReadLock(m) and WriteLock(m) to lock it.
|
||||||
|
using RWMutex = std::shared_mutex;
|
||||||
|
// Construct with an RWMutex as a non-const reference.
|
||||||
|
// locks the mutex in lock_shared mode (for reading). Locking in a thread that already owns a lock
|
||||||
|
// i.e. locking multiple times successively is UB. Construction may be blocking. Destruction is guaranteed to release the lock.
|
||||||
|
using ReadLock = std::shared_lock<RWMutex>;
|
||||||
|
// Construct with an RWMutex as a non-const reference.
|
||||||
|
// locks the mutex for writing. Construction may be blocking. Destruction is guaranteed to release the lock.
|
||||||
|
using WriteLock = std::unique_lock<RWMutex>;
|
||||||
|
|
@ -27,8 +27,9 @@ void HandleInput(const std::string& cmd) {
|
|||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
if (cmd == "exit") {
|
if (cmd == "exit") {
|
||||||
_Exit(0);
|
_Exit(0);
|
||||||
} else
|
} else {
|
||||||
LuaConsole->Execute(cmd);
|
LuaConsole->Execute(cmd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessOut() {
|
void ProcessOut() {
|
||||||
|
@ -7,14 +7,10 @@
|
|||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <shared_mutex>
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
#include "RWMutex.h"
|
||||||
using RWMutex = std::shared_mutex;
|
|
||||||
using ReadLock = std::shared_lock<RWMutex>;
|
|
||||||
using WriteLock = std::unique_lock<RWMutex>;
|
|
||||||
|
|
||||||
static RWMutex ThreadNameMapMutex;
|
static RWMutex ThreadNameMapMutex;
|
||||||
static std::unordered_map<std::thread::id, std::string> ThreadNameMap;
|
static std::unordered_map<std::thread::id, std::string> ThreadNameMap;
|
||||||
@ -29,7 +25,6 @@ std::string ThreadName() {
|
|||||||
ss << std::this_thread::get_id();
|
ss << std::this_thread::get_id();
|
||||||
Name = ss.str();
|
Name = ss.str();
|
||||||
}
|
}
|
||||||
lock.unlock();
|
|
||||||
return Name;
|
return Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,7 +33,6 @@ void SetThreadName(const std::string& Name, bool overwrite) {
|
|||||||
if (overwrite || ThreadNameMap.find(std::this_thread::get_id()) == ThreadNameMap.end()) {
|
if (overwrite || ThreadNameMap.find(std::this_thread::get_id()) == ThreadNameMap.end()) {
|
||||||
ThreadNameMap[std::this_thread::get_id()] = Name;
|
ThreadNameMap[std::this_thread::get_id()] = Name;
|
||||||
}
|
}
|
||||||
lock.unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string getDate() {
|
std::string getDate() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user