繁体   English   中英

boost scoped_lock mutex崩溃

[英]boost scoped_lock mutex crashes

我在这些函数中保护了std :: queue的访问函数,push,pop,size,boost :: mutexes和boost :: mutex :: scoped_lock

它不时在一个范围内的锁中崩溃

调用堆栈是这样的:

0  0x0040f005  boost::detail::win32::interlocked_bit_test_and_set  include/boost/thread/win32/thread_primitives.hpp  361
1  0x0040e879  boost::detail::basic_timed_mutex::timed_lock  include/boost/thread/win32/basic_timed_mutex.hpp  68
2  0x0040e9d3  boost::detail::basic_timed_mutex::lock  include/boost/thread/win32/basic_timed_mutex.hpp  64
3  0x0040b96b  boost::unique_lock<boost::mutex>::lock  include/boost/thread/locks.hpp  349
4  0x0040b998  unique_lock  include/boost/thread/locks.hpp  227
5  0x00403837  MyClass::inboxSize - this is my inboxSize function that uses this code:

MyClass::inboxSize ()
{
 boost::mutex::scoped_lock scoped_lock(m_inboxMutex);
 return m_inbox.size();
}

and the mutex is declared like this:
boost::mutex    m_inboxMutex;

它在此函数的最后一个粘贴行崩溃:

    inline bool interlocked_bit_test_and_set(long* x,long bit)
    {
        long const value=1<<bit;
        long old=*x;

和x有这个值:0xababac17

谢谢您的帮助

x的值看起来很可疑。

它看起来模糊地类似于0xabababab,它可能是在调试模式下分配给内存的初始值,或者可能是保护值的一部分,用于指示分配的内存块是否写入超出结束或开始

你能追溯到那个价值来自哪里吗?

我认为你没有正确创建MyClass的实例。 就像一个未正确初始化的MyClass指针,然后以这种方式使用ptr->inboxSize()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM