c# - 多线程同步的正确模式? (C#)

标签 c# synchronization multithreading

我有两个线程引用同一个变量——UI 线程和一个计时器线程。因此,我已将对它的访问包装在两个线程的锁定语句中。定时器线程的访问具有优先级——如果它正在使用变量并且 UI 线程也想要访问,我希望 UI 线程的操作完成,但只有在定时器线程的操作完成之后。

但是,计时器线程可能委托(delegate)回 UI 线程,因此 UI 线程需要有空闲时间来处理它。为了适应这一点,我让 UI 线程启动第三个线程来处理它的操作,以便它(第三个线程)可以等待计时器操作完成并且 UI 线程可用。锁定发生在第三个线程中。

对于这种同步,我应该使用什么样的正确模式?

最佳答案

一般的建议是,关键部分发生的任何事情都应该尽可能简单。特别是你应该避免嵌套锁。嵌套锁可能是死锁的根源。

根据您在“计时器”线程中所做的事情,您可能应该将关键部分与处理分开。定时器线程中的 IOW 仅从公共(public)变量中检索数据,然后进行其余处理,包括与锁外的 UI 线程交互。

添加第三个线程不会让你的生活更轻松

关于c# - 多线程同步的正确模式? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1697477/

相关文章:

Android Azure 离线同步 - 未完成同步

c# - 使用数据绑定(bind)处理样式

c# - 跨线程操作无效: Control 'statusStrip' accessed from a thread other than the thread it was created on

c# - Web API 中的依赖注入(inject)验证

c# - 如何从 C# 中的 app.config 获取一些元素?

android - 如何在前台和后台进程之间同步访问sqlite db?

c++ - 关闭cin与C scanf同步的弊端

java - 在线程池中执行可运行对象时给定线程不存在

Java : Synchronization of code

delphi - 为什么线程在此控制台应用程序中串行运行?