我确实发现了很多关于单身人士和线程安全的问题,但没有一个人能够为我解答这个问题......但如果重复这一点我会道歉。
如果我有一个将由多个线程使用的单例对象,我理解应该仔细考虑成员变量的任何变异,但是对于方法本地的变量呢?
考虑这个伪代码:
class Singleton [assume this has all the trappings of a proper singleton]
{
int doSomething() {
SomeObject obj;
obj.doStuff();
return obj.result();
}
}
在这种情况下,本地'obj'线程是否安全?即使Singleton类只有一个对象,每个线程都会获得它自己的副本吗?
答案 0 :(得分:4)
是的,obj
每个帖子都是唯一的。
如果访问&修改后的公共数据 - 例如doStuff
或result
访问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