64,682
社区成员
发帖
与我相关
我的任务
分享
class spinlock
{
public:
long v_;
public:
bool try_lock()
{
long r = BOOST_SP_INTERLOCKED_EXCHANGE( &v_, 1 );
BOOST_COMPILER_FENCE
return r == 0;
}
void lock()
{
for( unsigned k = 0; !try_lock(); ++k )
{
boost::detail::yield( k );
}
}
void unlock()
{
BOOST_COMPILER_FENCE
*const_cast< long volatile* >( &v_ ) = 0;
}
public:
class scoped_lock
{
private:
spinlock & sp_;
scoped_lock( scoped_lock const & );
scoped_lock & operator=( scoped_lock const & );
public:
explicit scoped_lock( spinlock & sp ): sp_( sp )
{
sp.lock();
}
~scoped_lock()
{
sp_.unlock();
}
};
};
} // namespace detail
} // namespace boost
新的spinlock有构造函数,构造函数里有unlock调用,所以不会死。跟版本有关系,换个新的版本应该就好了#include <boost/smart_ptr/detail/spinlock.hpp>
#include <iostream>
int main(int argc, char* argv[])
{
boost::detail::spinlock spin_lock;
spin_lock.lock();
std::cout << "lock" << std::endl;
system("pause");
return 0;
}
release版本无法输出"lock"