Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 屈服返回的螺纹安全性(是吗?)_C#_.net_Multithreading_C# 4.0_Thread Safety - Fatal编程技术网

C# 屈服返回的螺纹安全性(是吗?)

C# 屈服返回的螺纹安全性(是吗?),c#,.net,multithreading,c#-4.0,thread-safety,C#,.net,Multithreading,C# 4.0,Thread Safety,因此,我有一个在不同线程上的其他两个类之间共享的类的公共实例。让我解释一下: public class Config { public IEnumerable<Regex> GetSafeRuleRegex() { foreach (string rule in this.SafeRules) { Regex regex = null; try {

因此,我有一个在不同线程上的其他两个类之间共享的类的公共实例。让我解释一下:

public class Config
{
    public IEnumerable<Regex> GetSafeRuleRegex()
    {
        foreach (string rule in this.SafeRules)
        {
            Regex regex = null;

            try
            {
                regex = new Regex(rule, RegexOptions.IgnoreCase);
            }
            catch(Exception e)
            {
                Trace.Write(e.Message);
            }

            if (regex != null)
                yield return regex;
        }
    }
}

public class Dispatcher
{
    public void Start()
    {
        var config = new Config();

        for (var i = 0; i < 10; i++)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(o => new Item(config)));
        }
    }
}
公共类配置
{
public IEnumerable GetSafeRuleRegex()
{
foreach(此.SafeRules中的字符串规则)
{
Regex Regex=null;
尝试
{
正则表达式=新正则表达式(规则,RegexOptions.IgnoreCase);
}
捕获(例外e)
{
Trace.Write(e.Message);
}
if(regex!=null)
收益率-收益率正则表达式;
}
}
}
公共类调度器
{
公开作废开始()
{
var config=new config();
对于(变量i=0;i<10;i++)
{
QueueUserWorkItem(新WaitCallback(o=>newitem(config));
}
}
}

这会导致锁定问题吗?

该代码不会导致任何线程安全问题,前提是在其他线程枚举时不修改
SafeRules
集合。

该代码不会导致任何线程安全问题,如果您在其他线程枚举时不修改
SafeRules
集合。

这里的问题似乎是您正在从多个线程对单个
Config
实例调用
Config::GetSafeRuleRegex
,并且怀疑这是否安全

在这种情况下,
收益率
本身并不危险。调用
GetSafeRuleRegex
的每个线程将获得一个单独的迭代器实例。在多个线程上创建它们是安全的,前提是实例只在创建它的线程上使用


GetSafeRuleRegex
中的其他代码可能存在一些问题。但是,这取决于
Config
的实现细节,这些细节在这些问题中并不清楚

这里的问题似乎是,您正在从多个线程对单个
Config
实例调用
Config::GetSafeRuleRegex
,并且怀疑这是否安全

在这种情况下,
收益率
本身并不危险。调用
GetSafeRuleRegex
的每个线程将获得一个单独的迭代器实例。在多个线程上创建它们是安全的,前提是实例只在创建它的线程上使用


GetSafeRuleRegex
中的其他代码可能存在一些问题。但是,这取决于
Config
的实现细节,这些细节在这些问题中并不清楚

这是什么,安全规则?收集它被修改了吗?如果不知道
Item
config
config
的其余部分做了什么,就无法判断这是否会导致“锁定问题”。锁定问题到底是什么?我应该说是比赛条件。我的错@Aaron:安全规则不经常修改,它们放在配置文件中。我是线程新手,所以我不确定是否存储和使用正则表达式列表,但我需要确保用户传入了有效的正则表达式,这样应用程序就不会崩溃。这是什么。安全规则?收集它被修改了吗?如果不知道
Item
config
config
的其余部分做了什么,就无法判断这是否会导致“锁定问题”。锁定问题到底是什么?我应该说是比赛条件。我的错@Aaron:安全规则不经常修改,它们放在配置文件中。我是线程新手,所以我不确定是否存储和使用正则表达式列表,但我需要确保用户传入了有效的正则表达式,这样应用程序就不会崩溃。谢谢!我正在寻找的是单独的迭代器实例。如果我
锁定{}
编辑集合的安全规则,它会破坏任何迭代器吗,或者在我迭代之前我需要做些什么!我正在寻找的是单独的迭代器实例。如果我
锁定{}
编辑集合的安全规则,它会破坏任何迭代器吗,或者在我迭代之前我需要做些什么?