相关疑难解决方法(0)

在C#中锁定关键字

我理解来自MSDN的锁定关键字的主要功能

lock语句(C#参考)

lock关键字通过获取给定对象的互斥锁,执行语句,然后释放锁来将语句块标记为关键部分.

什么时候应该使用锁?

例如,它对多线程应用程序有意义,因为它可以保护数据.但是,当应用程序没有关闭任何其他线程时,它是否有必要?

使用锁存在性能问题吗?

我刚刚继承了一个在任何地方使用锁的应用程序,它是单线程的,我想知道我应该留下它们,它们甚至是必要的吗?

请注意,这更多是一般知识问题,应用程序速度很好,我想知道这是否是将来要遵循的良好设计模式,或者除非绝对需要,否则应该避免这种情况.

c# multithreading design-patterns locking

43
推荐指数
3
解决办法
3万
查看次数

实现线程安全

问题如何确保我的应用程序是线程安全的?他们的任何常见做法,测试方法,要避免的事情,要寻找的东西是什么?

背景我目前正在开发一个服务器应用程序,它在不同的线程中执行许多后台任务,并使用Indy与客户端进行通信(使用另一组自动生成的线程进行通信).由于应用程序应该是高度可用的,程序崩溃是一件非常糟糕的事情,我想确保应用程序是线程安全的.无论如何,我不时发现一段代码抛出一个以前从未发生过的异常,在大多数情况下我发现它是某种同步错误,我忘了正确地同步我的对象.因此,我的问题涉及最佳实践,线程安全测试和类似的事情.

mghie:谢谢你的回答!我或许应该更准确一点.为了清楚起见,我了解多线程的原理,我在整个程序中使用同步(监视器),我知道如何将线程问题与其他实现问题区分开来.但尽管如此,我仍然忘记不时添加适当的同步.举个例子,我在代码中使用了RTL排序功能.看起来像

FKeyList.Sort (CompareKeysFunc);
Run Code Online (Sandbox Code Playgroud)

事实证明,我必须在排序时同步FKeyList.在最初编写那么简单的代码行时,我才想起它.这是我想谈的这些问题.一个人容易忘记添加同步代码的地方有哪些?您如何确保在所有重要位置添加同步代码?

delphi multithreading synchronization thread-safety

19
推荐指数
2
解决办法
2570
查看次数

并行应用程序的Mutable与Immutable

在我写的应用程序中,我需要编写许多基类型,这很可能是不可变的.但我想知道可变类型在并行应用程序中如何与不可变类型进行比较.

你可以使用带有可变对象的锁,对吧?它与并行应用程序中不可变类型使用的其他技术相比如何?

你至少不使用具有不可变类型的锁,对吧?

.net c# parallel-processing mutable immutability

3
推荐指数
1
解决办法
2423
查看次数