std::regex 线程安全吗?

2023-11-25

相关静态 boost::wregex 实例是线程安全的吗?但对于标准化版本。我可以从具有相同正则表达式对象的多个线程调用 regex_search 吗?


声称std::regex在各个方面都是线程安全的,这是一个相当大胆的声明。 C++11 标准没有为正则表达式库做出此类保证。

然而,看看原型std::regex_search表明它需要basic_regex对象作为 const 参数。这意味着它受到标准库的 const 修饰符保证的保护意味着线程安全函数相对于该参数的值。

用标准话来说,就是:

[17.6.5.9/1]本节指定了实现应满足的要求,以防止数据竞争 (1.10)。除非另有说明,每个标准库函数都应满足每个要求。除了下面指定的情况之外,实现可能会阻止数据争用。

[17.6.5.9/3]C++ 标准库函数不得直接或间接修改当前线程以外的线程可访问的对象 (1.10),除非通过该函数的直接或间接访问该对象非常量论据,包括this.

因此,除非您使用的标准库的实现中存在错误,否则似乎会调用std::regex_search是线程安全的regex传入的对象。


其他想法:

只是因为std::regex_search就其而言是可重入的regex争论并不意味着你完全脱离了困境。执行修改操作regex以非线程安全的方式同时进行线程安全调用,例如std::regex_search仍然是未定义的行为。basic_regex's 赋值运算符, 标准::交换, and basic_regex::imbue想到的是非线程安全函数basic_regex他们运作。了解这一点后,您最好复印一份regex对象,它应该以最小的性能成本为每个线程在闲暇时使用/修改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::regex 线程安全吗? 的相关文章

  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • valgrind memcheck 是否支持检查 mmap

    我正在尝试 valgrind 来检测内存泄漏 它在堆泄漏 即从 malloc 或 new 分配内存 方面效果很好 但是 它支持检查 Linux 中的 mmap 泄漏吗 谢谢 张 不直接 很难调试 看看valgrind h VALGRIND
  • 更改为 Android SDK 26 后工具栏中的图标被压扁

    将我的应用程序从编译 定位 SDK v25 更改为 SDK v26 后 我的应用程序工具栏中的所有菜单图标现在都被压扁 压扁 拉伸 这是相关的布局代码
  • Postgres 会将 WHERE 子句下推到带有窗口函数(聚合)的 VIEW 中吗?

    的文档Pg的窗口函数说 窗口函数考虑的行是查询的 FROM 子句生成的 虚拟表 的行 并通过其 WHERE GROUP BY 和 HAVING 子句 如果有 进行过滤 例如 由于不满足 WHERE 条件而被删除的行不会被任何窗口函数看到 查
  • 如何在 Swift 中使用 MarqueeLabel?

    我想知道是否有一种方法可以启用文本的水平滚动 即选取框类型的文本 我用过这个库 https github com cbpowell MarqueeLabel并将 MarqueeLabel Swift 文件添加到我的应用程序中 但到目前为止
  • 无法在 Visual Studio 项目属性中选择 .NET Framework 4.6.1

    我使用以下网址安装了 NET Framework 4 6 1 http www microsoft com en us download details aspx id 49981 但是当我打开 Visual Studio 2015 项目时
  • 如何更改 MonthCalendar 控件中某些日期的颜色?

    如何更改 VB NET 中 MonthCalendar 控件中某些日期的颜色 例如 我需要将 1 月 21 日的颜色更改为红色 星期日更改为橙色等等 这不可能 没有内置的方法可以自定义各个日期或日期在屏幕上的显示方式MonthCalenda
  • 对于高度优化的矩阵乘法代码,MSVC 和 GCC 之间的性能差异

    我发现 Ivy Bridge 系统的 MSVC 在 Windows 上 和 GCC 在 Linux 上 编译的代码在性能上存在很大差异 该代码执行密集矩阵乘法 我在 GCC 中得到了 70 的峰值失败率 而在 MSVC 中只有 50 我想我
  • iOS Safari/Chrome 中的 Cookie 持久性

    当我关闭并重新打开 iOS Safari 和 Chrome 上的浏览器时 我的持久 cookie 将被删除 我使用的是 iOS 11 但也在 iOS10 9 上进行了测试 Cookie 在 Android 和桌面上正确保留 奇怪的是 它在
  • 使用 C# 的媒体基础

    媒体基金会是微软推荐的技术 它确实通过大量示例和解释来支持它 但全部都是本机代码 我发现了一个包装纸来源锻造让我能够将 Media Foundation 与 C 一起使用 但当我阅读人们谈论的内容时 并非所有事情都可以通过托管代码完成 我有
  • 网络参考和服务参考之间的区别?

    WCF 中的 Web 引用和服务引用有什么区别 WCF 中哪一个更可取 这里的低级答案是 Web 引用将创建一个客户端代理类 该类允许您的代码与通过 WSDL 描述的 Web 服务对话 并通过 SOAP 或 HTTP GET 进行通信 其他
  • Docker 更改活动容器上的已发布端口

    例如 我想更改活动容器上已发布的端口 docker run p 80 80 name nginx live nginx 然后稍后将其更改为另一个端口 例如 p 8080 80 Docker 没有一种机制可以在容器启动后更改其已发布的端口 当
  • 如何在 Objective-C 中将字符串中的英文数字转换为波斯语/阿拉伯语数字?

    我有一个英文字符串 可能有数字 也可能没有数字 但我希望这些数字作为波斯数字打印在屏幕上 例如如果NSString foo a string with numbers 1 2 3 那么输出应该是a string with numbers 我
  • 在加载数据之前显示 Ajax 加载器

    你好 朋友们 我想在数据加载之前显示 Ajax 加载器 特别是 div 但问题是数据是动态地出现在同一页面上 但我的脚本从另一个文件调用数据Script php请看下面我的代码 Script
  • GitHub for Mac 同步删除了我未提交的更改

    我在 Mac OS X 10 10 上使用 GitHub for Mac 版本 210 点击 同步 按钮删除了我未提交的更改 这种事应该时常发生吗 直到那时我才遇到过这个问题 尽管我主要使用 Windows 版的 Github 我认为如果我
  • PHP:Laravel 如何急切加载 find 方法

    我有一个模型Users其中有很多Pages 我想急切加载下面的方法 以便它只返回一个用户并立即加载所有页面 我该怎么做 user User find 1 pages user gt pages foreach pages as page v
  • “无法确定要运行哪个“make”命令。检查构建配置中的“make”步骤。” Qt创建者

    我安装了好几次 qt Creator 但它的花费从来没有像我现在的电脑那么高 首先 我使用了 Pendrive 上一直有的安装程序 Qt 5 8 的安装程序 告诉我无法下载某些存储库 我下载了同一安装程序的 5 9 版本 结果相同 在尝试安
  • 未找到 OpenCV 非托管 DLL asp.net

    我们正在构建一个 Web 应用程序 C NET 它使用 Emgu opencv 包装器形式的非托管库 我们强制构建为 32 位 x86 并且我们使用 Emgu 的 32 位版本 所有这些在本地构建上都运行良好 但是当发布到我们的网络服务器时
  • 使用 C++ 和 Windows API 以编程方式更改壁纸

    我一直在尝试使用 Qt 和 mingw32 编写一个应用程序来下载图像并将其设置为背景壁纸 我在网上阅读了几篇关于如何在 VB 和 C 中执行此操作的文章 以及在某种程度上如何在 C 中执行此操作 我目前正在致电SystemParamete
  • 错误:无效的“asm”:在 GCC 中使用内联汇编时,% 字母后缺少操作数编号

    我正在尝试将 MS 的简单汇编代码转换为与 gcc 一起使用 我尝试转换的 MS 汇编代码就在下面 我有两个int变量 number and return mov eax number neg eax return eax 而且 我已经尝试
  • std::regex 线程安全吗?

    相关静态 boost wregex 实例是线程安全的吗 但对于标准化版本 我可以从具有相同正则表达式对象的多个线程调用 regex search 吗 声称std regex在各个方面都是线程安全的 这是一个相当大胆的声明 C 11 标准没有