- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景:我遇到的一个应用程序使用 TRegEx
来自多个线程的单例。单例初始化为 TRegEx.Create(Pattern, [roCompiled])
在类构造函数中,线程使用它以 RegEx.Match(Value).Groups
开头,并且似乎没有采用同步机制,但是,应用程序运行良好。不过,这只是 TThread.Execute
的一小部分覆盖并且线程上的负载很小。所以这可能总是偶然的,因为线程不太可能在关键部分相互交叉。
想法:一方面,考虑一下,TRegEx
是有道理的。 instance 只会持有一个不可变(编译)模式并直接处理参数输入,或者将此输入保留在(TMatch
)返回值中以供以后可能的延续 - 就像 NextMatch
,例如,在 TMatch
上实现而不是 TRegEx
.和the underlying open source PCRE library seems to be thread-safe .这一切都符合上述情况。另一方面,我认为 TRegEx
实例通常不是线程安全的,例如,在 function TRegEx.Match(const Input: String): TMatch
(如上所述)看起来要与模式匹配的字符串在匹配之前首先存储到实例中。和相同的嵌套 TPerlRegEx
实例在各种功能链中传递并保持事件状态。共享 TRegEx
例如,似乎需要保护实例免受不协调的访问,例如使用关键部分。
也就是说,我怀疑 TRegEx不是线程安全的,但我想请教多线程和判断线程安全的人进行确认。因此,我的问题 - 非常笼统且独立于其演变而来的应用程序:
问题:TRegEx 是线程安全的吗?
最佳答案
构建 Delphi 的正则表达式类的 PCRE 库是线程安全的。见 PCRE pcre_exec thread safe?
但是,Delphi 包装器 TRegex
不是线程安全的。考虑对 pcre_exec
的调用。在 TPerlRegEx.Match
:
OffsetCount := pcre_exec(FPattern, FHints, @FSubject[0], FStop, 0, Opts, @Offsets[0],
High(Offsets));
这里
FSubject
和
Offsets
是
TPerlRegEx
的成员因此将使用
TPerlRegEx
的这个实例在不同线程之间共享,而它又归
TRegEx
的实例所有.
TRegEx
在您希望的意义上是线程安全的(多个线程在共享的编译正则表达式上执行匹配)这些变量需要对匹配函数的每次调用都是私有(private)的。
关于regex - System.RegularExpressions.TRegEx 是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53016707/
我正在使用数据注释来验证电子邮件地址。 为了在电子邮件地址无效时显示错误消息,我使用了一个名为 ErrorMessages 的 RESX 文件。 我的代码是这样的: public class Emai
我创建了一个类 MobileNumberAnnotation,它有一个指定正则表达式的属性。现在,当我指定 RegularExpressionAttribute 时,如何告诉它获取此属性的值作为模式?
我使用PowerShell解析日志文件目录,并从日志文件中提取所有XML条目。这样工作还可以。但是,由于日志文件可以包含许多这些xml片段,因此我想将找到的特定匹配的行号也放入我编写的XML文件的文件
我的枚举值为 None,这意味着尚未选择值。 None 永远不应该保存到数据库中。 enum MyEnum { None = 0, SomeValue = 1, ... } 有没有一种
我想借助 正则表达式 实现以下结果 - http://articles-test.mer.com --> should not match/accept or return false http://
我有一些文字看起来像这样: My arbitrary content.... ```c# public class Foo { //Some code } ``` My other arbit
我正在使用: [RegularExpression(@"^(""|\[)?[a-zA-Z0-9']{1,125}(""|\])?$")] 确保多行文本框的每一行都正确匹配。但是我无法弄清楚如何添加全局
我正在使用 Razor View 引擎开发 MVC 4 ASP.NET 应用程序。我在 View 中有一个名为“Title”的属性,并且已将其元数据设置如下: [RegularExpression(@
背景:我遇到的一个应用程序使用 TRegEx来自多个线程的单例。单例初始化为 TRegEx.Create(Pattern, [roCompiled])在类构造函数中,线程使用它以 RegEx.Matc
这是我的代码的摘录: string[] myStr = { " Line1: active 56:09 - tst0063, tst0063",
我想用“meter”替换字符串中的所有“m”。问题是我必须找到正确的模式,因为在单位符号前面可能有一个空格组合的数字。 我已经尝试过以下模式:[1-9][0-9]*\\s?m": "[1-9][0-9
对于使用 C# 的 RegularExpression,我似乎无法获得正确的语法,只允许最多 1 个小数点的正数。 我有以下 DataAnnotation 正整数工作: [RegularExpress
我有以下正则表达式: [RegularExpression(@"^[^,']+$|^$", ErrorMessageResourceName = "AlphaNumeric", ErrorMessag
我相信代码是不言自明的。为什么 Validator 没有使用 RegularExpression 属性? 许可证.cs: public class License { [Required] [
我的 View 模型中有以下属性: [Required] [MaxLength(12)] [MinLength(1)] [RegularExpression("[^0-9]", ErrorMessag
我目前正在使用 MVC 1.0 和 .NET 3.5。我正在使用 DataAnnotations 来验证我的模型。我正在尝试添加使用 RegularExpression 来验证邮政编码。我已将正则表达
我正在尝试学习 MVC4,我来到了称为验证的这一章。 我开始了解 DataAnnotations,它们具有非常简洁的属性来进行一些服务器端验证。在书中他们只解释了 [Required] 和 [Da
我想问任何熟练的 .net 开发人员,是否有可能定义正则表达式(使用 .net RegularExpressions 命名空间 cpabilities),这将包括对另一个正则表达式的引用。我想描述语法
我正在将基于 CoreText 的应用程序转换为 Swift,但在将匹配项与文本中的正则表达式匹配时遇到问题。 这是示例代码 let regexOptions = NSRegularExpressio
我们遇到了这里描述的问题:field-not-found-exception-with-net-4-4-5-compiled-regexes 简而言之:我尝试在已更新为 .Net 4.5 的机器上构建
我是一名优秀的程序员,十分优秀!