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:安全规则不经常修改,它们放在配置文件中。我是线程新手,所以我不确定是否存储和使用正则表达式列表,但我需要确保用户传入了有效的正则表达式,这样应用程序就不会崩溃。谢谢!我正在寻找的是单独的迭代器实例。如果我锁定{}
编辑集合的安全规则,它会破坏任何迭代器吗,或者在我迭代之前我需要做些什么!我正在寻找的是单独的迭代器实例。如果我锁定{}
编辑集合的安全规则,它会破坏任何迭代器吗,或者在我迭代之前我需要做些什么?