【问题标题】:Thread Safety with Classes an Accessors类和访问器的线程安全
【发布时间】:2012-01-27 13:06:13
【问题描述】:

好的,所以我有三个课程,ClassOneClassTwoClassThree

ClassOneMain 线程中运行,ClassTwoThreadTwo 线程中运行,ClassThreeThreadThree 中运行。
ClassTwoClassThree 中,我拨打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;

目前我使用访问器和 const 访问器,但我不知道它是否对线程安全,如果不是,我将如何在没有锁的情况下安全地执行此操作。

【问题讨论】:

    标签: multithreading winapi thread-safety


    【解决方案1】:

    不,它不是线程安全的。至于没有锁的任意类型的 getter - 我有 nuthin .. const 没有帮助 - 仅仅因为 getter 声明它不会更改成员 var 并不意味着其他一些线程不能更改它们。其他线程可能会调用 setter,或者 ClassOne 有一个内部线程正在更改它们。

    【讨论】:

    • 我没有使用 const 来保证线程安全,只是某些访问器需要它。
    • 而且我不能做内螺纹,我有6个线程的限制。
    猜你喜欢
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    相关资源
    最近更新 更多