c# - C# 中的 lock 关键字

标签 c# multithreading design-patterns locking

从MSDN上了解到lock关键字的主要作用

lock Statement (C# Reference)

The lock keyword marks a statement block as a critical section by obtaining the mutual-exclusion lock for a given object, executing a statement, and then releasing the lock.

什么时候应该使用锁?

例如,它对多线程应用程序很有意义,因为它可以保护数据。但是当应用程序不剥离任何其他线程时是否有必要?

使用锁是否存在性能问题?

我刚刚继承了一个到处都在使用锁的应用程序,它是单线程的,我想知道我是否应该保留它们,它们是否有必要?

请注意,这更像是一个常识性问题,应用程序速度还不错,我想知道这是否是将来可以遵循的良好设计模式,或者除非绝对需要,否则应该避免这种情况。

最佳答案

When should the lock be used?

应该使用锁来保护多线程代码中的共享资源。不为别的。

But is it necessary when the application does not spin off any other threads?

绝对不是。这只是浪费时间。但是请确保您没有隐式使用系统线程。例如,如果您使用异步 I/O,您可能会收到来自随机线程的回调,而不是您的原始线程。

Is there performance issues with using lock?

是的。它们在单线程应用程序中不是很大,但为什么要进行不需要的调用?

...if that is a good design pattern to follow in the future[?]

随意锁定所有内容是一种糟糕的设计模式。如果您的代码因随机锁定而变得杂乱无章,然后您决定使用后台线程来完成某些工作,那么您很可能会遇到死锁。在多个线程之间共享资源需要仔细设计,越能隔离棘手的部分越好。

关于c# - C# 中的 lock 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59590/

相关文章:

c# - 主窗口关闭时如何重新创建 Windows 窗体应用程序

C# 设计,以便我可以轻松添加/更新映射到数据库的对象

c# - 选择 GoF 模式

c# - 为什么不能将常量字符串分配给常量字符串类型?

c# - 为什么 IHttpContextAccessor.HttpContext 不正确

java - 类的 Getter 方法是线程安全的吗?

ruby - 处理许多 if 条件的更好方法?

c# - 确定文本文件编码架构

c# - ASP.NET Core 2.0 预览版 1 : How to set up Cookie Authentication with custom login path

wpf - 在另一个线程中创建 WPF 元素