首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘ReaderWriterLock`锁资源、代码还是线程?

‘ReaderWriterLock`锁资源、代码还是线程?
EN

Stack Overflow用户
提问于 2022-05-06 07:08:18
回答 1查看 49关注 0票数 0

我正在开发一个asp.net webapi项目。如果本地文件过期,控制器操作方法将检查本地文件并下载更新的文件。由于此操作可能由多个客户同时请求,因此恐怕会出现文件并发问题。

在我的downloadService类中,我考虑使用ReaderWriterLock

问题1:我应该在哪里输入ReaderWriterLock?作为私人会员,我应该保留它吗?

代码语言:javascript
复制
private readonly ReaderWriterLock asyncReaderWriterLock = new();

或者我应该每次在fileWrite方法中创建它吗?

问题2:假设它是一个实例成员,如果有多个downloadService对象,那么就会有很多锁。还能用吗?

这是锁文件还是代码?

问题3:如果有100个文件,当我操作文件A时,它不应该影响文件B。这意味着,当线程A写入文件A时,线程B可以同时写入文件B。那么,我需要为这些文件分配100个锁吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-05-06 07:48:40

,我该把ReaderWriterLock写在哪里?

应该在使用它的类中初始化它。

,我应该把它作为私人会员保存吗?

是的,否则某些无关的类就有可能使用锁,这就增加了死锁的风险。避免死锁的一个好做法是只锁定一小部分代码,避免引发任何事件,或者在持有锁时调用任意代码。

,还是应该每次在fileWrite方法中创建它?

锁对象应该表示正在被锁定的资源,并且每个资源只应该有一个锁对象。为每个fileWrite创建一个新对象将适得其反,因为它不会提供任何保护。

假设它是一个实例成员,如果有多个downloadService对象,那么就会有很多锁。还能用吗?

是的,你可以拥有任意数量的锁对象。

有这个锁定文件或代码吗?

lock对象不关心所受保护的内容。它只确保一次只有一个线程可以保存锁。受保护的是你自己。

如果有100个文件,当我操作文件A时,它不应该影响文件B。这意味着,当线程A写入文件A时,线程B可以同时写入文件B。那么,我需要为这些文件分配100个锁吗?

如果希望在文件级别锁定粒度,那么每个文件需要一个锁。

我要指出,多线程编程是困难的。线程错误往往是虚假的,难以再现和不明显。有些关于排序的规则在涉及多个线程时就不适用了。因此,我鼓励您在做任何涉及多个线程的重要工作之前,阅读有关这个主题和所涉及的危险的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72137450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档