Multithreading 什么时候我应该问自己我的方法是否是线程安全的?
什么时候应该考虑我的方法是否是线程安全的Multithreading 什么时候我应该问自己我的方法是否是线程安全的?,multithreading,thread-safety,Multithreading,Thread Safety,什么时候应该考虑我的方法是否是线程安全的 谢谢。如果您知道该方法可能会同时从多个线程(直接或其他方法)调用,则需要此功能。如果您知道该方法可能会同时从多个线程(直接或其他方法)调用,则需要此功能。如果您正在制作web应用程序,如果您正在使用线程,如果您正在编写一个库,如果您将来可能会执行其中一个,请确保线程安全。如果您正在编写web应用程序,如果您正在使用线程,如果您正在编写库,如果您将来可能会执行其中一个,请确保线程安全。在C#,我们发现,远程处理使用Singleton创建的对象不是线程安全的
谢谢。如果您知道该方法可能会同时从多个线程(直接或其他方法)调用,则需要此功能。如果您知道该方法可能会同时从多个线程(直接或其他方法)调用,则需要此功能。如果您正在制作web应用程序,如果您正在使用线程,如果您正在编写一个库,如果您将来可能会执行其中一个,请确保线程安全。如果您正在编写web应用程序,如果您正在使用线程,如果您正在编写库,如果您将来可能会执行其中一个,请确保线程安全。在C#,我们发现,远程处理使用Singleton创建的对象不是线程安全的,因此您需要确保在类/方法中考虑到这一点。在C#中,我们发现远程处理使用Singleton创建的对象不是线程安全的,因此,您需要确保在类/方法中考虑到这一点。问:“可以跨线程共享数据吗?” 具体而言: “实例能否跨线程共享?” “能否跨线程共享类静态数据?” 还要确定常量/非常量方法之间的关系: “变异方法在执行过程中会使类不变量无效吗?” 思考最后一个问题的一种方式是 复制构造函数是否可以在执行变异方法期间的任何时间运行,并且构造的对象仍然有效 (有些情况下——立即想到保持性能统计数据——数据就是数据,如果计数在一个或下一个间隔内变为丁格(我这里不是说丁格问题,只是与读取的交互),这并不重要。因此,变异(丁格)方法不需要使用复制方法序列化) 当然,您还需要考虑变异方法与变异方法的交互。问:“数据可以跨线程共享吗?” 具体而言: “实例能否跨线程共享?” “能否跨线程共享类静态数据?” 还要确定常量/非常量方法之间的关系: “变异方法在执行过程中会使类不变量无效吗?” 思考最后一个问题的一种方式是 复制构造函数是否可以在执行变异方法期间的任何时间运行,并且构造的对象仍然有效 (有些情况下——立即想到保持性能统计数据——数据就是数据,如果计数在一个或下一个间隔内变为丁格(我这里不是说丁格问题,只是与读取的交互),这并不重要。因此,变异(丁格)方法不需要使用复制方法序列化) 当然,您还需要考虑变异方法与变异方法的交互作用。有两种情况: 您的工作将主要在单线程环境中进行。问问自己“是否有可能从多线程的东西调用它?” 您的工作将在一个以多线程为主的环境中进行。扪心自问:“我能证明这只会从一个线程调用吗?或者,稍微弱一点,我能证明它只会在排他性保证下调用吗?” 如果第一个问题的答案是“是”,或者第二个问题的答案是“否”,请确保您的代码对于多个同时执行是安全的。有两种情况: 您的工作将主要在单线程环境中进行。问问自己“是否有可能从多线程的东西调用它?” 您的工作将在一个以多线程为主的环境中进行。扪心自问:“我能证明这只会从一个线程调用吗?或者,稍微弱一点,我能证明它只会在排他性保证下调用吗?” 如果第一个问题的结果是“是”,或者第二个问题的结果是“否”,那么请确保您的代码对于多个同时执行是安全的