2011-04-22 91 views
0

我对提升非常非常新颖。据我了解,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(); 
} 
+0

您使用的是什么版本的boost? (检查'boost/version.hpp'找出) – ildjarn 2011-04-22 22:35:33

+0

它说1.34,但我知道这不是最新版本。我怎么能更新这个? – tpar44 2011-04-22 22:51:33

+2

@ tpar44:有问题; boost.thread在1.35从头开始被重写。您可以参考[适用于您的版本的文档](http://www.boost.org/doc/libs/1_34_1/libs/thread/doc/index.html),或者您可以[从当前版本的升级版本源(http://www.boost.org/doc/libs/release/more/getting_started/unix-variants.html)。 – ildjarn 2011-04-22 22:55:39

回答

1

要锁定在提升的锁,你需要将它传递给相关scoped_lock,在这种情况下boost::mutex::scoped_lock。所以要锁上锁l_,请这样做:

boost::mutex::scoped_lock l(l_) 
+0

但现在我很困惑。我的教授唯一的东西是放在函数boost :: mutex * lock中,所以我必须放入lock()中? – tpar44 2011-04-23 18:02:16

+0

@ tpar44 boost :: mutex :: scoped_lock local_lock(* lock) – rlc 2011-04-24 14:21:47

+0

@ tpar44这个想法是用作用域锁取代你的锁 - > lock()并移除要解锁的调用。 RAII将负责解锁。如果您需要限制锁的范围,请在其周围放置大括号{}:当scoped_lock超出范围时,互斥锁将被解锁。 – rlc 2011-04-24 14:26:16