我正在使用C#和.NEt 3.5.OptionA和OptionB有什么区别?
class MyClass
{
private object m_Locker = new object();
private Dicionary<string, object> m_Hash = new Dictionary<string, object>();
public void OptionA()
{
lock(m_Locker){
// Do something with the dictionary
}
}
public void OptionB()
{
lock(m_Hash){
// Do something with the dictionary
}
}
}
Run Code Online (Sandbox Code Playgroud)
我开始涉足线程化(主要是为多线程应用程序创建缓存,不使用HttpCache类,因为它没有附加到网站上),我在很多例子中都看到了OptionA语法在线看,但我不明白在OptionB上做了什么,如果有的话.
在我构建条件变量类的过程中,我偶然发现了一个简单的方法,我想与堆栈溢出社区分享.我正在谷歌搜索一小时的大部分时间,并且无法找到一个好的教程或.NET-ish示例感觉正确,希望这对其他人有用.
假设我们有多个线程和一个List负责保存实时数据的公共。我们有一些线程负责将数据添加到列表对象。另一个线程负责从列表对象中获取数据,然后从顶部删除项目。
问题:从 a 的开头删除List并同时在单独的线程中将数据添加到列表的末尾是否安全?List对象是如何实现的?