我什么时候应该问自己我的方法是否是线程安全的?

时间:2009-09-22 08:48:16

标签: multithreading thread-safety

我应该何时考虑我的方法是否是线程安全的?

感谢。

5 个答案:

答案 0 :(得分:3)

问:“可以跨线程共享数据吗?”

具体是:

“可以跨线程共享实例吗?” “可以跨线程共享静态数据类吗?”

还要确定const / non-const方法之间的关系:

“变异方法在执行期间是否使类不变量无效?”

考虑这最后一个问题的一种方法是

复制构造函数可以在 ANY 时间运行 DURING / OVERLAPPING 执行变异方法并且仍然使构造的对象有效吗?

(有些情况 - 立即想到保持性能统计数据 - 数据只是数据,如果计数被记录[我不是在谈论这里的叮当问题只是与读取的交互]在一个时间间隔内或者下一个没关系。所以变异(dinging)方法不需要用复制方法序列化)

当然,您还需要考虑使用变异方法改变方法交互。

答案 1 :(得分:2)

如果您知道可以同时从多个线程(直接或从其他方法)调用该方法,则需要这样做。

答案 2 :(得分:1)

如果您正在使用Web应用程序,如果您正在使用线程,如果您正在编写库,并且如果您将来可能会执行其中一个,请将其设置为线程安全。

答案 3 :(得分:1)

在C#中,我们发现使用Singleton创建远程对象,该对象不是线程安全的,因此您需要在类/方法中确保考虑到这一点。

答案 4 :(得分:0)

有两种情况:

您的工作将主要在单线程环境中进行。问问自己“有没有机会从多线程的东西中调用它?”。

您的工作将主要在多线程环境中进行。问问自己“我可以证明这只会从单个线程中调用吗?或者,稍微弱一些,我可以证明它只会在排他性保证下被调用吗?”

如果第一个问题产生“是”或第二个问题产生“否”,请确保您的代码对于多个同时执行是安全的。