std :: unique_lock <std :: mutex> lock(mtx); “错误:mtx不是一种类型”?

时间:2018-05-24 17:31:10

标签: c++

编辑:根据@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);

所以,我想,我的问题是:我应该信任和遵循哪一个?其中一个已经过时了吗?他们为什么如此不同?

提前致谢!

0 个答案:

没有答案