gpt4 book ai didi

c++ - 段错误 : 11 while using boost mutex

转载 作者:行者123 更新时间:2023-11-28 00:40:07 25 4
gpt4 key购买 nike

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

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

#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));
}

Mutex mtx;

void thread()
{
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 编译了它。当我运行它时,出现 Segmentation fault: 11

它有什么问题?

最佳答案

除了这个方法至少有问题之外,我看不出代码有问题。 Linux 上的 gcc v4.7.0 也没有问题(没有段错误)。所以你可能没有正确设置 boost 或者在某处有错误。您应该在调试器下运行您的程序并查看问题发生的位置。理论上这段代码:

if(Lock _lock_=x){}else

可以编译为:

if(Lock _lock_= Lock(x) ){}else

并调用复制构造函数并对互斥体进行双重解锁。为确保这不是问题,请将类 Lock 的复制构造函数设为私有(private)。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com