Jah*_*bar 6 c++ multithreading boost
我在这些函数中保护了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;
Run Code Online (Sandbox Code Playgroud)
它在此函数的最后一个粘贴行崩溃:
inline bool interlocked_bit_test_and_set(long* x,long bit)
{
long const value=1<<bit;
long old=*x;
Run Code Online (Sandbox Code Playgroud)
和x有这个值:0xababac17
谢谢您的帮助
x 的值对我来说看起来很可疑。
它看起来与 0xabababab 有点相似,它可能是在调试模式下分配给分配内存的初始值,也可能是保护值的一部分,用于指示分配的内存块是否写入到末尾或开头之外
你能追溯到这个值从哪里来吗?
| 归档时间: |
|
| 查看次数: |
2677 次 |
| 最近记录: |