c++ - Boost 编译问题

标签 c++ boost locking compiler-errors mutex

我对 boost 非常非常陌生。据我了解,boost::mutex 有两个成员 lock() 和 unlock()。但是,我收到以下关于它们后面的函数的错误消息。我在与源代码相同的文件夹中运行了“sudo apt-get install libboost-dev”命令。这也是我教授给学生的代码。我确定它应该正确编译。任何帮助都会很棒!

错误信息:

matrix.cc: In function ‘void p_scalarproduct_t(int*, int*, int*, int, int, boost::mutex*)’:

matrix.cc:75: error: ‘class boost::mutex’ has no member named ‘lock

matrix.cc:77: error: ‘class boost::mutex’ has no member named ‘unlock

matrix.cc: In function ‘int p_scalarproduct(int*, int*, int, int)’:

matrix.cc:91: error: ‘bind’ is not a member of ‘boost

代码:

void p_scalarproduct_t(int* c, int* a, int* b, 
                       int s, int e, boost::mutex* lock)
{ 
    int tmp;

    tmp = 0;
    for (int k = s; k < e; k++)
        tmp += a[k] * b[k];

    lock->lock();
    *c = *c + tmp;
    lock->unlock();
}

最佳答案

要在 boost 中锁定一个锁,您需要将其传递给关联的 scoped_lock,在本例中为 boost::mutex::scoped_lock。因此,要锁定一把锁 l_,请执行以下操作:

boost::mutex::scoped_lock l(l_)

关于c++ - Boost 编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5759936/

相关文章:

c++ - A::B::B::B::B...B::f() 对吗?为什么我可以这样做?

c++ - multi_index_container 删除最后一个元素

c++ - 如何使用 boost 格式打印位域

boost - 如何从 streambuf 中获取一个或多个特定字节?

iphone - iOS5锁屏后如何继续播放视频音轨?

c++ - 为什么每个人都使用 unanchored 命名空间声明(即 std::not::std::)?

c++ - 当我们使用 new 分配内存时,操作系统会做什么样的簿记?

laravel - 如何在现有的 Eloquent 模型上 `lockForUpdate()`?

java - 为什么我运行这段代码时永远不会死锁?

c++ - linux 中的 wmain 或 _tmain 替代品是什么?