【发布时间】:2011-07-20 19:02:30
【问题描述】:
我想知道下面的类是否线程安全并且在多线程上下文中完美运行?
public class ThreadSafeClass
{
private List<int> commandList = new List<int>();
public void AddCommand(int newCommand)
{
lock(syncObj) {
commandList.Add(newCommand);
}
}
public List<int> Split()
{
List<int> oldList = commandList;
commandList = new List<int>();
return oldList;
}
}
ThreadA周期性调用split方法,很多线程调用AddCommand,split方法中的commandList指向内存中的某个list,分配新list时所有内容都在oldList中
拆分的目的是我想获取所有排队的命令,并在下一次调用中返回其余的命令,...同时让应用程序向 commandList 添加新项目。
因为我专注于拆分方法,我忘记为添加操作添加锁,因为它不是线程安全的谢谢:(可以 poyrazoğlu)但问题仍然存在于拆分
【问题讨论】:
-
Split() 应该做什么?您可以将文档添加到您的类及其成员函数中吗?
-
根据您的问题,您不应该编写多线程代码,除非作为学习实验。这是一个血统介绍:msdn.microsoft.com/en-us/library/aa446522.aspx 您还可以在 System.Threading 命名空间中做一些阅读。这篇文章列出了一些你应该学习的原语:csharptest.net/?p=323
标签: c# .net multithreading thread-safety