повысьте scoped_lock взаимоисключающие катастрофические отказы

Я защитил станд.:: функции доступа очереди, продвиньте, вытолкайте, измерьте с повышением:: взаимные исключения и повышение:: взаимное исключение:: 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

Спасибо за справку

6
задан JahSumbar 21 May 2010 в 12:26
поделиться

2 ответа

Думаю, вы неправильно создали экземпляр MyClass. Как указатель на MyClass, который не был правильно инициализирован, а затем использовался таким образом ptr-> inboxSize () .

0
ответ дан 17 December 2019 в 20:29
поделиться

Значение x мне кажется подозрительным.

Это немного похоже на 0xabababab, которое может быть начальным значением, присвоенным выделенной памяти в режиме отладки, или, возможно, частью охранных значений, чтобы указать, записаны ли выделенные блоки памяти за пределами конца или начала

Вы можете отследить, где это значение взято из?

2
ответ дан 17 December 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: