编辑:根据@Slava的要求,编辑以获得更清晰。抱歉! 编辑2:尝试@ AnT的建议(我不得不承认,我确实感觉自己有点像以前没有尝试过这样的白痴),我把有关的声明移到了正确的功能范围内,这无疑是模糊的错误确实消失了。谢谢你,先生/女士!
我正在开发一个简单的游戏引擎,实现了消息总线,我正在编写一个消息记录类,它将打印所有流量到调试日志,以使我的生活更容易。
现在,我将继续这样做:我是一个相对较新的程序员,这是诚实的,我第一次尝试使用互斥锁,锁等。
以下是我遇到麻烦的课程部分
.
.
.
.
~logger() {
logRunSwitch = false;
_task.join();
_debug.close();
}
private:
// Condition variable
condition_variable _lockCondition;
// Mutex
mutex _lockMutex;
// Create unique lock with mutex
unique_lock<mutex> lock(_lockMutex);
// The "switch" for telling logLoop() to log the line
bool logLoopSwitch = false;
// The temporary string to store the messages in
string messageToLog;
// Loop to log all traffic going through the message bus, is to be run in its own detached thread
void logLoop( auto progStart ) {
.
.
.
我的目的是让函数 logLoop()在自己的专用线程中运行,由类的构造函数调用,并将通过消息总线传递的消息打印到名为“的debug.log”。
我包含unique_lock<mutex> lock(_lockMutex);
的原因是我可以运行一个条件变量,只有主动循环,好吧,当有消息存储在上面的文件中时循环。
我遇到问题的部分具体是:
unique_lock<mutex> lock(_lockMutex);
当我尝试编译它时(为了进行调试),我遇到了这个错误:
error: '_lockMutex' is not a type
我一直在做'谷歌踢踏舞试图找到解决方案,我发现了一件奇怪的事情:
我正在使用的参考资料(来自cplusplus.com):
std::mutex mtx; // mutex for critical section
void print_block (int n, char c) {
// critical section (exclusive access to std::cout signaled by lifetime of lck):
std::unique_lock<std::mutex> lck (mtx);
与cppreference.com上的不同:
struct Box {
explicit Box(int num) : num_things{num} {}
int num_things;
std::mutex m;
};
void transfer(Box &from, Box &to, int num)
{
// don't actually take the locks yet
std::unique_lock<std::mutex> lock1(from.m, std::defer_lock);
std::unique_lock<std::mutex> lock2(to.m, std::defer_lock);
所以,我想,我的问题是:我应该信任和遵循哪一个?其中一个已经过时了吗?他们为什么如此不同?
提前致谢!