безопасно использовать функции std :: string в потоке? (C ++) - PullRequest
0 голосов
/ 05 октября 2019

Я хочу создать поток в DLL, который будет делать некоторые веб-запросы. Теперь в потоке я использую функции std :: sting (c_str (), at (), find (), substr ()) и (string + string). я знаю, что потоки работают асинхронно, а также я узнал, что если я вызову 1 функцию 2 раза одновременно (1 из основной программы и 1 из потока), это вызовет проблемы / сбой, я полагаю, потому что оба используют одну и ту же память?

так что теперь, если я делаю много веб-запросов очень быстро, я иногда зависаю. Я думаю, это потому, что в то же время 2 раза использовать функцию std :: string. Кроме того, если это может быть причиной проблемы, есть ли другой способ, которым я могу использовать для этой работы?

1 Ответ

2 голосов
/ 05 октября 2019

Вы разделяете один и тот же std::string объект в двух потоках? Если это так (и этот объект изменяется одним потоком, в то время как другой поток также пытается его использовать), это приведет к неопределенному поведению, если только вы не защитите эти обращения с помощью какой-либо формы синхронизации (например, mutex * 1005). *).

Если OTOH, каждый из двух потоков работает со своими отдельными / частными std::string объектами, это не вызовет проблемы.

...