Max*_*ich 0 c# multithreading locking thread-safety
我有这样的课.
public abstract class HtmlObject<T>
{
public HtmlObject() {}
public HtmlObject(string id, string name, T value)
{
this.ID = id;
this.Name = name;
this.Value = value;
}
public string ID { get; set; }
public string Name { get; set; }
public T Value { get; set; }
public abstract string Build();
}
Run Code Online (Sandbox Code Playgroud)
具体实现看起来像这样.
public class HtmlRadio : HtmlObject<string>
{
private const string RadioHtml = "<input type='radio' name='{0}' value='{1}' {2} />{1}<br />";
public bool Checked { get; set; }
public override string Build()
{
if (this.Checked)
return string.Format(HtmlRadio.RadioHtml, this.Name, this.Value, "checked='checked'");
else
return string.Format(HtmlRadio.RadioHtml, this.Name, this.Value, string.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
而我想知道的是,如果Build()跨线程进行调用将是安全的.我的假设是不会因为我接下来的一系列电话
HtmlRadio radio = new HtmlRadio();
radio.Checked = false;
//Something could happen here?
string result = radio.Build();
Run Code Online (Sandbox Code Playgroud)
我的理解是,radio.Checked它的设置和调用之间的价值可能会发生变化,这Build()是正确的吗?如果是这样的话,如果我愿意,我怎么能"修理"这个?
IHtmlRadio radio = new HtmlRadio();
radio.Checked = false;
//Something could happen here only if you give `radio` to another thread somehow.
string result = radio.Build();
Run Code Online (Sandbox Code Playgroud)
另一个线程能够访问radio吗?如果没有,那你就没事了.
另外,你害怕什么?如果选中从false更改为true或true更改为false,您真的关心吗?它不会爆炸 - 它将返回一个布尔值,而不是抛出异常.
编辑: 不,它不是编写的线程安全,另一个线程可以更改Checked,Value并且Name,没有任何一个以任何顺序受到任何保护.
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |