我应该何时考虑我的方法是否是线程安全的?
感谢。
答案 0 :(得分:3)
问:“可以跨线程共享数据吗?”
具体是:
“可以跨线程共享实例吗?” “可以跨线程共享静态数据类吗?”
还要确定const / non-const方法之间的关系:
“变异方法在执行期间是否使类不变量无效?”
考虑这最后一个问题的一种方法是
复制构造函数可以在 ANY 时间运行 DURING / OVERLAPPING 执行变异方法并且仍然使构造的对象有效吗?
(有些情况 - 立即想到保持性能统计数据 - 数据只是数据,如果计数被记录[我不是在谈论这里的叮当问题只是与读取的交互]在一个时间间隔内或者下一个没关系。所以变异(dinging)方法不需要用复制方法序列化)
当然,您还需要考虑使用变异方法改变方法交互。
答案 1 :(得分:2)
如果您知道可以同时从多个线程(直接或从其他方法)调用该方法,则需要这样做。
答案 2 :(得分:1)
如果您正在使用Web应用程序,如果您正在使用线程,如果您正在编写库,并且如果您将来可能会执行其中一个,请将其设置为线程安全。
答案 3 :(得分:1)
在C#中,我们发现使用Singleton创建远程对象,该对象不是线程安全的,因此您需要在类/方法中确保考虑到这一点。
答案 4 :(得分:0)
有两种情况:
您的工作将主要在单线程环境中进行。问问自己“有没有机会从多线程的东西中调用它?”。
您的工作将主要在多线程环境中进行。问问自己“我可以证明这只会从单个线程中调用吗?或者,稍微弱一些,我可以证明它只会在排他性保证下被调用吗?”
如果第一个问题产生“是”或第二个问题产生“否”,请确保您的代码对于多个同时执行是安全的。