Безопасны ли функции локально для потока тела cpp?Если так, то как насчет вызова статических функций из него? - PullRequest
0 голосов
/ 30 января 2012

У меня много ошибок многопоточности, так как я представил второй рабочий поток. Проблемы незначительны и их трудно отследить. Мои последние показания указывают на

class MyOtherClass {
    static String defaultName;
    static String getDefaultName() {return defaultName;}
}

который используется:

result plainLocalFunction() {
    result r = E_SUCCESS;
    String fallbackName = MyOtherClass::getDefaultName();
    //Do other stuff with locals.
    return r;
}

Я давно отлаживал это, и я могу только предположить, что либо plainLocalFunction разделяет его локальные значения между потоками, либо что вызов getDefaultName() включает запись в статическую переменную, которая не является поточно-безопасной? Спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 30 января 2012

статические переменные внутри функции сделают вашу функцию не входящей и не поточно-ориентированной.

Если в функции есть только локальные переменные, то у каждого стека потоков будет своя копия этих переменных, и функция будет поточно-ориентированной.

0 голосов
/ 30 января 2012

Статические переменные абсолютно не поточнобезопасны, если вы пишете в них (здесь: defaultName). Чтение (если никто не пишет в него) должно быть нормальным, и я не думаю, что вызов статической функции (или динамической в ​​зависимости от того, что имеет значение) небезопасен для потоков, если в нем нет ничего небезопасного.

Используйте CriticalSections (например), чтобы защитить ваши переменные, которые используются несколькими потоками (и хотя бы один поток может писать в него).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...