[Редактировать: (скопировано из комментария) Как оказалось, проблема была в другом, но спасибо всем за ваш вклад.]
У меня есть класс общего контейнера, который использует один мьютекс для блокировки функций push() и pop(), поскольку я не хочу одновременно изменять начало и конец. Вот код:
int Queue::push( WorkUnit unit )
{
pthread_mutex_lock( &_writeMutex );
int errorCode = 0;
try
{
_queue.push_back( unit );
}
catch( std::bad_alloc )
{
errorCode = 1;
}
pthread_mutex_unlock( &_writeMutex );
return errorCode;
}
Когда я запускаю это в режиме отладки, все прекрасно. Когда я работаю в режиме выпуска, я получаю сбои примерно в то время, когда программа драйвера начинает нажимать и выталкивать «одновременно». Вызывает ли блок try/catch немедленный выход, если он перехватывает исключение std::bad_alloc? Если да, то должен ли я заключить оставшуюся часть функции в блок finally?
Кроме того, возможно ли, что более медленный режим отладки работает только потому, что мои вызовы push() и pop() никогда не происходят одновременно?
pop()
? - person Mike Seymour   schedule 07.01.2010