那这样是不是不用考虑线程安全的问题。是不是无需用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
线程安全跟同不同步没有什么关系。线程安全的对象(类),照样是可能必须同步操作的,否则其处理的数据也会产生错误。
假如根本不访问相干的对象,当然不进行同步。但是这跟“线程安全”没有关系。
假如根本不访问相干的对象,当然不进行同步。但是这跟“线程安全”没有关系。