.NET多线程同步

时间:2009-10-22 02:07:46

标签: .net multithreading

我的问题的快速版本:

当您访问对象的同一实例时,是否只需要使用“lock”?例如,如果我在我的线程输入方法中实例化所有新内容,我是否必须担心锁定任何对象?

我的问题的详细解释:

我的方案是,我有一个具有唯一标识符的工作对象,该工作对象中有1个方法。在该方法中,我创建了多个Web服务代理的新实例,并将从这些调用中检索到的信息存储在工作对象的公共属性中。完成所有工作后(所有线程都已完成),我将信息存储到数据库中。

有什么理由考虑使用“锁定”吗?

3 个答案:

答案 0 :(得分:1)

您只需要在不应同时运行的一个或多个代码段上使用lock。例如,如果您的代码在多个线程上使用相同的List<T>,则需要使用锁。

在您的情况下,如果每个线程有一个单独的工作对象,并且如果它们不与任何其他工作对象交互或访问任何共享状态,那么您应该没问题。

如需更具体的答案,请发布更多详情,或者,最好是来源。


编辑:在回复您的评论时,这取决于InvokeService的实施情况。只要它不访问任何其他静态成员,你可能会在没有任何锁定的情况下正常运行。

答案 1 :(得分:0)

你说得对 - 你不需要锁定不通过线程访问的对象。

然而。请注意,没有全局资源(即I / O流),这些资源已经被多个线程访问而没有同步。

答案 2 :(得分:0)

如果要从多个线程访问静态字段或属性,则只需使用lock关键字。