我创建了一个包含两个线程的类。线程共享三个列表和几个布尔值。一个线程只读取这些字段,另一个线程读写。
为了使布尔线程安全,我为所有这些创建了私有属性,并锁定了它们的gets和sets(使用专门为锁定创建的Object)。对于列表,我创建了一个带有锁定get的属性,它通过List.ToArray()返回一个数组,然后创建了锁定的Add方法,用于向列表添加新项目(使用列表本身作为锁定对象)。
我的问题是:创建所有这些属性为我的类添加了大量额外的代码,因为在单线程类中,它只是私有字段 - 以至于它只是看起来有些愚蠢#&# 39;为了实现第二个线程,只需要很多开销。有必要,还是有更好的方法呢?
(我还读了另一个stackoverflow页面,它提示锁定获取和设置实际上不是线程安全的,因为它们只锁定属性并为调用者提供对该字段的解锁引用。但是这对于值类型是不正确的,是吗?我的List属性是返回数组,而不是对列表字段的引用。)
编辑:正如我在评论中所说,该课程用于建立ssh连接。大多数课程都关注自动化与我连接的特定linux机器有关的一些东西。螺纹部分仅用于向shell发送命令并读取输出。
在以下示例中"输入"和"输出"引用返回由_input和_output列表的ToArray()方法生成的数组的锁定属性。
ShellStream.Open();
while(!StopThread)
{
if (WaitForPrompt)
{
if (inputIndex > Input.Length)
{
ShellStream.WriteLine(Input[inputIndex]);
inputIndex++;
output = ShellStream.WaitForPrompt();
AddOutput(output);
}
}
else
{
if (inputIndex > Input.Length)
{
ShellStream.WriteLine(Input[inputIndex]);
inputIndex++;
}
output = ShellStream.Read();
if (out != null)
AddOutput(output);
}
}
ShellStream.Close();