Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 什么时候我应该问自己我的方法是否是线程安全的?_Multithreading_Thread Safety - Fatal编程技术网

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

Multithreading 什么时候我应该问自己我的方法是否是线程安全的?,multithreading,thread-safety,Multithreading,Thread Safety,什么时候应该考虑我的方法是否是线程安全的 谢谢。如果您知道该方法可能会同时从多个线程(直接或其他方法)调用,则需要此功能。如果您知道该方法可能会同时从多个线程(直接或其他方法)调用,则需要此功能。如果您正在制作web应用程序,如果您正在使用线程,如果您正在编写一个库,如果您将来可能会执行其中一个,请确保线程安全。如果您正在编写web应用程序,如果您正在使用线程,如果您正在编写库,如果您将来可能会执行其中一个,请确保线程安全。在C#,我们发现,远程处理使用Singleton创建的对象不是线程安全的

什么时候应该考虑我的方法是否是线程安全的


谢谢。

如果您知道该方法可能会同时从多个线程(直接或其他方法)调用,则需要此功能。

如果您知道该方法可能会同时从多个线程(直接或其他方法)调用,则需要此功能。

如果您正在制作web应用程序,如果您正在使用线程,如果您正在编写一个库,如果您将来可能会执行其中一个,请确保线程安全。

如果您正在编写web应用程序,如果您正在使用线程,如果您正在编写库,如果您将来可能会执行其中一个,请确保线程安全。

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

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

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

具体而言:

“实例能否跨线程共享?” “能否跨线程共享类静态数据?”

还要确定常量/非常量方法之间的关系:

“变异方法在执行过程中会使类不变量无效吗?”

思考最后一个问题的一种方式是

复制构造函数是否可以在执行变异方法期间的任何时间运行,并且构造的对象仍然有效

(有些情况下——立即想到保持性能统计数据——数据就是数据,如果计数在一个或下一个间隔内变为丁格(我这里不是说丁格问题,只是与读取的交互),这并不重要。因此,变异(丁格)方法不需要使用复制方法序列化)

当然,您还需要考虑变异方法与变异方法的交互。

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

具体而言:

“实例能否跨线程共享?” “能否跨线程共享类静态数据?”

还要确定常量/非常量方法之间的关系:

“变异方法在执行过程中会使类不变量无效吗?”

思考最后一个问题的一种方式是

复制构造函数是否可以在执行变异方法期间的任何时间运行,并且构造的对象仍然有效

(有些情况下——立即想到保持性能统计数据——数据就是数据,如果计数在一个或下一个间隔内变为丁格(我这里不是说丁格问题,只是与读取的交互),这并不重要。因此,变异(丁格)方法不需要使用复制方法序列化)

当然,您还需要考虑变异方法与变异方法的交互作用。

有两种情况:

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

您的工作将在一个以多线程为主的环境中进行。扪心自问:“我能证明这只会从一个线程调用吗?或者,稍微弱一点,我能证明它只会在排他性保证下调用吗?”

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

有两种情况:

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

您的工作将在一个以多线程为主的环境中进行。扪心自问:“我能证明这只会从一个线程调用吗?或者,稍微弱一点,我能证明它只会在排他性保证下调用吗?”

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