单例线程的局部方法变量是否安全?

时间:2012-12-03 19:47:01

标签: c++ thread-safety singleton

我确实发现了很多关于单身人士和线程安全的问题,但没有一个人能够为我解答这个问题......但如果重复这一点我会道歉。

如果我有一个将由多个线程使用的单例对象,我理解应该仔细考虑成员变量的任何变异,但是对于方法本地的变量呢?

考虑这个伪代码:

class Singleton  [assume this has all the trappings of a proper singleton]
{
    int doSomething() {
        SomeObject obj;
        obj.doStuff();
        return obj.result();
    }

}

在这种情况下,本地'obj'线程是否安全?即使Singleton类只有一个对象,每个线程都会获得它自己的副本吗?

2 个答案:

答案 0 :(得分:4)

是的,obj每个帖子都是唯一的。

如果访问&修改后的公共数据 - 例如doStuffresult访问static成员SomeObject或某些全球成员。

答案 1 :(得分:0)

正如Luchian所说,到目前为止你很好,如果你有静电或任何&或*变量,然后尝试使用互斥锁或旋转锁。所有基于unix的系统都存在互斥锁和旋转锁,我认为你也可以在windows中使用它们,但是你需要先以某种方式添加它们。

以下是pthread互斥锁的链接:http://www.thegeekstuff.com/2012/05/c-mutex-examples/

另外还有一个用于windows:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686927(v=vs.85).aspx