那这样是不是不用考虑线程安全的问题。是不是无需用ConcurrentStack代替Stack ?
用普通的集合类就可以了?
用普通的集合类就可以了?
解决方案
20
1、假如是“完全不相干”,当然不需要同步。但是,
2、假如你在多个线程里面用了同一个Stack,那么,它们就不算“完全不相干”。
因此:
2、假如你在多个线程里面用了同一个Stack,那么,它们就不算“完全不相干”。
因此:
static void Main()
{
Stack<string> taskNames = new Stack<string>();
foreach (string name in taskNames)
{
ThreadPool.QueueUserWorkItem(ThreadProc, name);
}
}
static void ThreadProc(object state)
{
// 完全不相干,不需要同步
string name = (string)state;
}
static ConcurrentStack<string> stack = new ConcurrentStack<string>();
static void ThreadProc(object state)
{
// 使用了同一个stack,这里就要用同步(是可以用ConcurrentStack)
string name;
if (stack.TryPop(out name))
{
//...
}
}
5
没有共享资源就行
5
是的 

5
完全不相干,那就没问题
5
线程安全跟同不同步没有什么关系。线程安全的对象(类),照样是可能必须同步操作的,否则其处理的数据也会产生错误。
假如根本不访问相干的对象,当然不进行同步。但是这跟“线程安全”没有关系。
假如根本不访问相干的对象,当然不进行同步。但是这跟“线程安全”没有关系。