有4个线程,线程任务完全不相干

.Net技术 码拜 8年前 (2016-03-06) 774次浏览
那这样是不是不用考虑线程安全的问题。是不是无需用ConcurrentStack代替Stack ?
用普通的集合类就可以了?
解决方案

20

1、假如是“完全不相干”,当然不需要同步。但是,
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

是的 有4个线程,线程任务完全不相干

5

完全不相干,那就没问题

5

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

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明有4个线程,线程任务完全不相干
喜欢 (0)
[1034331897@qq.com]
分享 (0)