У меня есть многопоточная программа, где я забыл использовать мьютекс. Однажды программа прервалась со следующей трассировкой стека:
T abort
T __libc_message
t malloc_printerr
T free
T operator delete(void*)
W std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string()`
Я использовал компилятор gnu c ++ 4.4.3 (в Ubuntu 10.04). Правда ли, что такое поведение может быть из-за использования строки, как в следующем примере. В действительности все гораздо сложнее, но я хочу знать, может ли следующий простой код вызвать такой прерывание.
Поток, который прерывается, когда вызывается деструктор строки копирования:
void f()
{
std::string s = someglobalstring;
}
Нить, которая изменяет строку:
void g()
{
someglobalstring = newcontent;
}
Вопросы:
Являются ли новые реализации C ++ поточно-ориентированными с чтением и записью std :: string?
Ожидается ли, что деструктор прерывает работу здесь?