首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >螺纹-这个设计的安全性?

螺纹-这个设计的安全性?
EN

Stack Overflow用户
提问于 2015-11-10 19:56:16
回答 1查看 41关注 0票数 0

我继承了一些要维护的C#代码,并且对设计有一些保留,但我不知道是否应该。这是一个控制某些工业过程的C#应用程序。

我们有一个方法DoCertify(),它触发一个工作线程来控制一系列工业过程。在序列的每一步中,它控制一些机器,然后编译一些数据。

在UI线程中,调用方分配表示这些步骤的对象数组,并调用DoCertify(),将数组作为ref变量传递。在执行序列中的每个步骤时,DoCertify()的辅助线程周期性地填充数组关联元素(步骤0、element0、步骤1、元素1等)中的数据,并调用委托(即对UI线程的回调),宣布该步骤已经完成,然后继续下一步。

当调用UI线程中的回调时,它读取并显示刚刚完成的数组元素中的数据。以这种方式,在运行DoCertify()时,可以在显示器上更新它的进度。

这里面没有明确的线程安全,但是代码的作者说它本质上是安全的,因为一旦工作线程写入一个元素并发出它已经完成的信号,它就不会再次写入该元素,因此不会有工作线程和UI线程试图同时访问数组中的相同元素的危险。

这是否提供了足够的线程安全,还是应该在此设计中构建更显式的线程安全?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-10 23:07:10

它是线程安全的,但不安全。我的意思是,如果你说的是真的,在被调用者调用回调之前,调用者不会读取任何内容,而调用者在切换到工作人员之后不会修改原始数据,等等--你很好。

但这是不安全的,因为开发人员将来可能很容易地做一些事情,比如尝试在调用之间重用数组、向数组添加值、更改数组,或者以其他方式利用ref,以为他们可以在相同的范围内使用这些值。谁知道呢。

你所描述的设计不能防止任何一端的不当行为。在数组的副本(以及数组元素的副本)上工作的设计是一个更好的选择。

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

https://stackoverflow.com/questions/33638426

复制
相关文章

相似问题

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