- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在多线程代码中,当一个实例可能被多个线程读取或写入时,它们需要被锁定以安全地执行这些操作。
为了避免重复创建要锁定的对象和通过代码编写一堆锁定语句,我创建了一个通用类来处理锁定。
从概念上讲,我是否遗漏了什么?这应该有效,对吧?
public class Locked<T> where T : new()
{
private readonly object locker = new object();
private T value;
public Locked()
: this(default(T))
{ }
public Locked(T value)
{
this.value = value;
}
public T Get()
{
lock (this.locker)
{
return this.value;
}
}
public void Set(T value)
{
lock (this.locker)
{
this.value = value;
}
}
}
还有一个在类里面使用它的例子:
private Locked<bool> stopWorkerThread = new Locked<bool>();
public void WorkerThreadEntryPoint()
{
while (true)
{
if (this.stopWorkerThread.Get())
{
break;
}
另外,我如何以自动化方式测试这样的东西(例如创建单元测试)?
最后,我可以做些什么来实现++ 和 -- 运算符,以避免这种情况:
this.runningThreads.Set(this.runningThreads.Get() + 1);
最佳答案
仅在获取/设置期间锁定;当然,在许多常见情况下,这无论如何都是原子的,仅仅是由于数据大小。
然而,实际上大多数锁需要跨越的范围不止于此,就像仅在 Add 等上锁定集合并没有多大帮助一样 - 调用者通常需要一个锁来跨越“它在那里吗?如果所以更新,否则添加“序列。
对于像 bool 这样简单的东西,“volatile”可能会更简单地解决问题 - 特别是如果它只是为了循环退出。
您可能还想考虑 [MethodImpl(MethodImplOptions.Synchronized)] - 尽管我个人更喜欢私有(private)锁对象(就像您使用的那样)以防止外部人员锁定对象的问题(上面使用“this”作为锁)。
对于此单元测试,您首先需要一些东西来证明它已损坏 - 这将很难,因为操作非常小(并且对于大多数数据类型来说已经是原子的)。它避免的另一件事(volatile 也修复)是在寄存器中缓存,但这又是一种优化,很难强制证明它被破坏了。
如果您对锁包装器感兴趣,您可以考虑像 this 这样的现有代码.
关于c# - 使 MTA 中的锁定更容易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/171640/
我正在开发一个包含大量类的项目,我想将它们编译成 jar。我知道入口点和manifest.txt以及我的jar中的所有需要的项目,我的类都已编译并具有.class文件和所有内容,但问题是我必须将所
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
在我的计算结束时,我打印结果: System.out.println("\nTree\t\tOdds of being by the sought author"); for (ParseTree p
我有一个具有多个时间范围的数据,例如考虑以下列 | from1 | to1 | from2 | to2 | from3 | to3 | | 06:00 | 07:30 | 09:30 |
我对 JavaScript 和 jQuery 相当缺乏经验,但对于我正在处理的 ASP.Net 网站,我需要两者。我正在慢慢弄清楚,但我一直严重依赖 StackOverFlow。 有谁知道有什么工具(
我正在考虑用 PHP 编写一些代码来更改图像的所有 id 以匹配其 alt。在 jQuery 中这会更容易实现吗? 我需要做的是走这条线 img alt="拼图"src="images/cole.jp
鉴于 websinte 的结构
假设我有 struct Value { int foo(); }; size_t *begin = ..., *end = ...; 如果我想在 C++03 中对一堆 Value 索
我开始创建一个将与公共(public) API 交互的 iPhone 应用程序。 我的问题是,使用 XML 还是 JSON 哪个更快和/或更容易? 最佳答案 根据 Sam Soffes , Touch
如果 PHP 是用 C 编写的,那么用 PHP 编写服务器端脚本与用 C 编写服务器端脚本究竟有什么区别,尤其是如果我使用的是 C 的 Web 框架可以处理 mysql 连接、SESSIONS 等?
我记得有一次看到一个人做的一个项目,他用某种语言用类似 json 的字符串编写了这样的东西,创建了非常好的 html。有没有类似的东西我可以用于 C# 或 .NET radio-box{ AName,
我的一位网页设计师 friend 仍在使用表格制作网站,但他使用 css 非常好,我也很好地使用 css,但使用 而且我在布局方面比我的 friend 更多地面临跨浏览器问题。 我向我的 friend
我想创建一个图,在那里可以看到 x 轴的替代刻度,例如pi/2, pi, 3pi/2, 等等。到目前为止,这对我来说只适用于一个相当不方便的代码(看看我创建的行 pi.halfs , pi.fulls
我是一名优秀的程序员,十分优秀!