c++ - 错误 : expected unqualified-id while using boost mutex

标签 c++ multithreading boost mutex

我尝试实现一个基于boost mutex的锁宏,代码如下:

#include <boost/thread.hpp>
#include <iostream>

using namespace std;

#define lock(x) if(Lock _lock_=x){}else

class Mutex{
public:
    friend class Lock;

private:
    boost::mutex mutex_;

    void Lock(){
        mutex_.lock();
    };

    void Unlock(){
        mutex_.unlock();
    };
};

class Lock{
public:
    Lock(Mutex& mutex):mutex_(mutex){mutex_.Lock();};
    ~Lock(){mutex_.Unlock();};

    operator bool() const {
        return false;
    }

private:
    Mutex& mutex_;
};

void wait(int seconds)
{
    boost::this_thread::sleep(boost::posix_time::seconds(seconds));
}

void thread()
{
    Mutex mtx;
    for (int i = 0; i < 5; ++i)
    {
        lock(mtx){
            wait(1);
            std::cout << "Thread " << boost::this_thread::get_id() << ": " << i << std::endl;
        }
    }
}

int main()
{
    boost::thread t1(thread);
    boost::thread t2(thread);
    t1.join();
    t2.join();
}

当我在 Mac 操作系统中使用 clang++ -std=c++11 -stdlib=libc++ lock_raii.cc -lboost_system -lboost_thread 编译它时。出现错误信息:

lock_raii.cc:16:10: error: expected unqualified-id
                mutex_.lock();
                       ^
lock_raii.cc:6:17: note: expanded from macro 'lock'
#define lock(x) if(Lock _lock_=x){}else
                ^
1 error generated.

那么,它有什么问题呢?

最佳答案

这是 mutex_.lock(); 在宏扩展后的样子:

mutex_.if(Lock _lock_=){}else;

关于c++ - 错误 : expected unqualified-id while using boost mutex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19282035/

相关文章:

c++ - 为什么要在结构中保留内存?

c# - 使用线程运行 webservice 方法

python - 当任何线程完成任务时终止多个线程

c++ - boost Spirit 可以扫描语法树并产生结果吗?

qt - 从 CMake 依赖项中排除 Qt 和 Boost 包含内容

c++ - cmake 找不到 boost 库,因为它查找了错误的文件名

c++ - 将类集枚举更改为非类集枚举

c++ - 每次获取不同的地址

c++ - '.' token c++ 之前的预期初始化器

android - 如何在 View 类中设置定时器?