을 사용하면 내가 부스트 뮤텍스를 기반으로 잠금 매크로를 실행 (11) 동안, 코드는 다음과 같습니다 : 나는 맥 OS가 clang++ -std=c++11 -stdlib=libc++ lock_raii.cc -lboost_system -lboost_thread
를 사용하여 컴파일을분할 오류가 : 부스트 뮤텍스
#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();
}
. 실행하면 Segmentation fault: 11
이 있습니다.
무엇이 문제입니까?
디버깅을 시도 했습니까? –
해당 매크로를 사용하지 마십시오. 못 생겼어. – GManNickG
C++ 11은 표준 뮤텍스 및 잠금 구성을 제공합니다. [lock_guard] (http://en.cppreference.com/w/cpp/thread/lock_guard)를 참조하십시오. 매크로 트릭은 영리하지만 좋은 습관은 아닙니다. 간접 및인지 마찰의 또 다른 계층을 추가하여 사실상 이득을 얻지 못합니다. –