Безопасность потоков с классами и аксессуарами - PullRequest
2 голосов
/ 27 января 2012

Хорошо, у меня есть три класса: ClassOne, ClassTwo и ClassThree.

ClassOne выполняется в потоке Main, ClassTwo выполняется в потоке ThreadTwo, а ClassThree выполняется в ThreadThree.
В ClassTwo и в ClassThree Я звоню на ClassOne и наоборот.

    ClassTwo::SomeMethod(){
    int l_SomeVar = m_ClassOnePointer->SomeAccessorMethod() // return m_SomeVariable
    int l_SomeVar = m_ClassOnePointer->SomeConstAccessor()  // SomeConstAccessor() const;
    int l_SomeVar = m_ClassOnePointer->m_SomeVariable;      // Just a standard public int (not const, static, or volatile).

    m_ClassOnePointer->m_SetSomeVariable(30);
    m_ClassOnePointer->m_SomeVariable = 30;

В настоящее время я использую аксессоры и константные аксессоры, но я не знаю, безопасно ли это для многопоточности, если это не так, как бы мне было безопасно делать это без блокировок.

1 Ответ

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

Нет, это не потокобезопасно.Что касается геттеров для произвольных типов без блокировок - у меня есть nuthin ... const не помогает - просто потому, что getter заявляет, что не собирается изменять переменные-члены, не означает, что некоторые другие потоки не могут их изменить.Другие потоки могут вызывать сеттеры, или, возможно, ClassOne имеет внутренний поток, который их изменяет.

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