我的问题的快速版本:.NET多线程同步
是否只有在访问同一个对象实例时需要使用“锁定”?例如,如果我在我的线程入口方法中实例化新的所有东西,我是否必须担心锁定任何对象?
详细我的问题的说明:
我的情况是,我有一个唯一的标识符工作对象,而且工作对象中有1种方法。在该方法中,我创建了多个Web服务代理的新实例,并将从这些调用中检索到的信息存储在工作对象的公共属性中。一旦所有工作完成(所有线程都完成),我将信息存储到数据库中。
任何理由考虑使用“锁”?
我的问题的快速版本:.NET多线程同步
是否只有在访问同一个对象实例时需要使用“锁定”?例如,如果我在我的线程入口方法中实例化新的所有东西,我是否必须担心锁定任何对象?
详细我的问题的说明:
我的情况是,我有一个唯一的标识符工作对象,而且工作对象中有1种方法。在该方法中,我创建了多个Web服务代理的新实例,并将从这些调用中检索到的信息存储在工作对象的公共属性中。一旦所有工作完成(所有线程都完成),我将信息存储到数据库中。
任何理由考虑使用“锁”?
您只需要在不应同时运行的一段或多段代码上使用lock
。例如,如果您的代码在多个线程上使用相同的List<T>
,则需要使用锁定。
对于你的情况,如果你有一个单独的工作对象每个线程,如果他们不与任何其他工作对象交互或访问任何共享状态,你应该没问题。
对于一个更具体的答案,请发布更多的细节,或者,最好是来源。
编辑:在回答你的评论,它取决于InvokeService
实施。只要它不访问任何其他静态成员,你可能会运行良好,没有任何锁。
你说得很对 - 你不需要锁定不在线程间访问的对象。
但是,请注意,没有全局资源(即I/O流),它们在没有同步的情况下被多个线程访问。
关于I/O流,我可能会最接近的是,我的线程入口方法也访问网站来解析数据。我正在创建一个'StreamReader'来分析HttpWebResponse对象的值。 – Benny 2009-10-22 02:25:23