线程安全数据集

2023-12-06

我想让 DataTable/DataSet 的更新操作成为线程安全的。有大约 20 个线程,每个线程使用以下命令更新大约 40 行全局 DataTableRows.Find(pk)数据表的方法。每个线程将更新 DataTable 的不同行。

我正在使用以下数据集包装类。这种方法是线程安全的吗?

public sealed class MyDataSet{

    public static DataSet ds = new DataSet();

    public static UpdateRow(key,data)
    {
        object _lock = new object();
        DataRow dr = ds.Tables[0].Rows.Find(key);
        lock(_lock){          
            dr.AcceptChanges();
            dr.BeginEdit();
            dr["col"] = data;
            dr.EndEdit();
        }
    }
}

该方法是从for loop.

for(int x=0; x<40; x++;){
    if(someCondition)
    .
    .
    .
    MyDataSet.UpdateRow(key,data);
    .
    .
    .
    }

一切都是在多线程环境中完成的。 UpdateRow方法线程安全吗?


不,这不安全。您应该更改您的代码:

public sealed class MyDataSet{

    public static DataSet ds = new DataSet();

    private static object _lock = new object();

    public static UpdateRow(key,data)
    {
        lock(_lock){
            DataRow dr = ds.Tables[0].Rows.Find(key);
            dr.AcceptChanges();
            dr.BeginEdit();
            dr["col"] = data;
            dr.EndEdit();
        }
    }
}

Your _lock对象应该是程序中的静态对象,以使其成为良好的锁。和你的Find应该在锁定部分。

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

线程安全数据集 的相关文章

  • std::vector 的复制构造函数如何运行?

    一个如何std vector
  • 如何指定CMAKE外部项目的编译器?

    我使用ExternalProject Add 包含一个外部项目 我想要的是能够做到 cmake DCMAKE CXX COMPILER
  • 对相当大的整数的大集合的操作的快速实现

    描述 我实现了以下类 LabSetInt64 参见下面的代码 这里的目标是尽可能快地操作大量大整数 最多 10M 的值 我的主要要求集中在 至关重要 尽快获取集合的大小 基数 重要 能够非常快速地迭代一组集合 所以 从下面的实现开始 我还有
  • C++17 中带有 noexcept 的 std::function

    在 C 17 中noexcept 已添加到类型系统中 http www open std org jtc1 sc22 wg21 docs papers 2015 p0012r1 html void r1 void f noexcept f
  • ObservableCollection 上的“Cascade”绑定,包含其他 ObservableCollection

    我有一个项目需要显示合同列表 Class Affaire 每个合约都有一个阶段列表 类别阶段 我使用绑定在 2 个不同的 ListView 中显示它们中的每一个 问题是当我从 ListView 中删除一个 Phase 时 显示 Phases
  • 在 C 中声明和初始化数组

    C 有没有办法先声明然后初始化数组 到目前为止 我一直在初始化一个这样的数组 int myArray SIZE 1 2 3 4 但我需要做这样的事情 int myArray SIZE myArray 1 2 3 4 在 C99 中 您可以使
  • 如何获取任意类型的默认值

    在 C 中我可以写这样的东西 class AnyThing
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • 有哪些 API 可在 Windows 中使用 C# 配置扬声器设置?

    我环顾了很多不同的地方 但似乎找不到一个简单的方法来做到这一点 我在 Windows 7 中有多个声卡 并使用 HDMI 将声音输出到我的 AVR 放大器 我遇到的问题是 当放大器关闭时 它会导致窗口丢失扬声器配置 所以我想做的是编写一个小
  • 为什么测试在 TeamCity 中运行比直接在 NUnit 中运行需要更长的时间?

    我进行了一些 C 性能测试 基本上运行两种不同的方法 并检查一种方法的运行速度是否比另一种方法快得多 当我在 NUnit 本地运行它们时 其中一个测试的运行速度是另一个测试的十倍 因此我有一个 NUnit 测试 它使用Stopwatch检查
  • 让 GCC/Clang 使用 CMOV

    我有一个简单的标记值联合 这些值可以是int64 ts or doubles 我正在对这些联合进行加法 但需要注意的是 如果两个参数都代表int64 t值 那么结果也应该有一个int64 t value 这是代码 include
  • 最小对的总和

    Given 2N点 in a 2D plane 你必须将它们分组为N pairs使得所有对的点之间的距离的总和是最小可能值 所需的输出只是总和 换句话说 如果a1 a2 an分别是第一对 第二对 和第 n 对点之间的距离 则 a1 a2 a
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • DLL 中的 XP 风格组合框

    我需要使用 C 和 WIN32 API 无 MFC 在 DLL 中创建 XP 风格的组合框 我设法在 DLL 中创建控件 不是以 XP 风格 我设法在带有清单的 exe 中创建 XP 样式组合框 但它在 DLL 中不起作用 为了让您的 DL
  • C语言中如何将整数转换为字符? [复制]

    这个问题在这里已经有答案了 C语言中如何将整数转换为字符 C 中的字符已经是数字 字符的 ASCII 代码 无需转换 如果要将数字转换为相应的字符 只需添加 0 即可 c i 0 0 是 ASCii 表中的一个字符
  • 如何最好地为 Visual Studio 2017 构建的 CMake C++ 项目设置输出目录?

    我使用 Visual Studio 2017 使用 vcxproj 文件构建 C 桌面项目 我喜欢默认行为 其中输出目录是项目下面的子目录 例如 myproj sln myproj vcxproj x64 myproj release my
  • 序列化时如何跳过 xml 声明?

    我正在尝试输出一个没有 xml 头的 xml 文件 例如 我试过 Type t obj GetType XmlSerializer xs new XmlSerializer t XmlWriter xw XmlWriter Create c
  • 在 C++ 中将大型数据向量写入/读取到二进制文件

    我有一个 C 程序 它通过将 ascii 文件中的网格人口数据读取到大型 8640x3432 元素双精度向量中来计算给定半径内的人口 将 ascii 数据读入向量大约需要 30 秒 循环每列和每行 而程序的其余部分只需要几秒钟 我被要求通过
  • 为什么 32 位 .NET 进程的引用类型的最小大小为 12 字节

    我正在读专业 Net 性能 https rads stackoverflow com amzn click com 1430244585本书有关参考类型内部结构的部分 它提到 对于 32 位 net 进程 引用类型具有 4 字节的对象头和
  • 散列 hash_hmac 时,Convert.ToChar(0) 散列结果与 PHP 中的 chr(0) 不同的字符串

    我在 PHP 中有一个字符串 它被转换为字节数组并进行哈希处理 转换为字节数组的字符串如下所示 G 字符 0 便便 我需要 C 中的等效字节数组 这样我才能得到相同的哈希值 编辑 这是完整的问题 生成的哈希值不同 PHP api secre

随机推荐

  • Math.random() === Math.random() 是否可能

    在 JavaScript 中 这个表达式在任何浏览器中都会计算为 true 吗 为什么或者为什么不 Math random Math random 注意 请请按字面意思理解上面的代码 我不是问 Math random 是否会生成重复值 注意
  • crm 2016 在线不支持 SetParameter("fetchXml", FetchXml)

    我有这个代码 function FilterCasesSubgrid var CasesSubgrid Xrm Page getControl contact getGrid var CasesSubgrid window parent d
  • XPages ValuePicker 仅限 1000 个

    我使用 valuePicker 和 DojoListTextBox 设计元素 如果我有超过 1 000 个值 则此值选择器最多列出 1 000 条记录 如何增加这个限制 我只是想让它列出我有多少个值
  • AES 填充无效且无法删除

    我正在使用 AES 加密算法来加密和解密项目中的值 我的代码几乎每次都能工作 但有时我会得到Padding is invalid and cannot be removed错误 我的项目是 ASP NET Core 3 1 项目 它发布在
  • 在运行集成测试之前,如何让 Maven 构建等待 Jetty 服务器以分叉模式启动?

    我有一份关于代码覆盖率的报告一体化 test 我确实有集成测试 并且这些测试在 Maven 构建中成功运行 当我单击 HTML 报告右上角的 会话 链接时 我可以在列表中看到我的测试类 但我看不到现在由测试执行的主要类 并且所有覆盖率报告百
  • 如何在C#中的列表框中插入复选框?

    我想要一个代码来在 C Sharp 的列表框中插入一个复选框 选择该复选框后 必须选择列表框中的所有项目 您可以使用 CheckListBox 显示一个列表 其中每个项目旁边都有一个复选框 但是要制作一个选择列表中所有内容的复选框 它必须是
  • socket.io 删除特定侦听器

    我正在使用 Socket io v0 9 16 和 铬34 我正在尝试删除特定侦听器 或取消订阅特定订阅 像这样的东西 socket on testComplete function data console log test comple
  • JavaScript - 如何同时播放多个视频?

    我有一个array我希望同时播放的视频元素 我在网上找到的唯一方法是使用new MediaController 但这似乎并没有得到广泛 如果有支持的话 我期望做的是 var videos document querySelectorAll
  • Kubernetes 上的 Angular(入口路由)

    我需要如何配置 Angular 7 应用程序正在运行的入口 apiVersion extensions v1beta1 kind Ingress metadata name myingress annotations nginx ingre
  • 如何在 R 中建立多项式回归模型?

    我有一个包含 70 个变量的数据集 我想尝试对其进行多项式回归 如果列数是三 四 我可以手动编写这样的代码 model lt lm y poly var1 3 poly var2 3 poly var4 4 如果我们有 70 个变量 我们将
  • 如何创建仅在链接 pthread 时才使用互斥体的库?

    我正在 Linux 上创建一个 C 库 它有多个函数 它们一起对一些全局数据进行操作 为了使这些函数是线程安全的 它们必须在代码中的适当位置使用互斥体 在 Linux 中 为了在应用程序中使用 pthreads 需要链接到适当的库 lp线程
  • 在触摸设备上的浏览器中禁用双击“缩放”选项

    我想要disable the 双击缩放功能性在指定元素上在浏览器中 在触摸设备上 无需禁用所有缩放功能 例如 可以多次点击一个元素来发生某件事 这在桌面浏览器上运行良好 如预期 但在触摸设备浏览器上 它会放大 仅 CSS 解决方案 Add
  • SQL 忽略 WHERE 子句

    M SSMS SQL 我的 WHERE 子句中的这一行抛弃了我的 WHERE 子句的其余部分 WHERE AND b DESIGNATION IS NOT NULL OR c DESIGNATION IS NOT NULL 由于某种原因 当
  • JfreeChart自定义票据标签

    我正在使用 JFreechart 在生成的报告中绘制图表JasperReports 实际上我正在使用动态报告它使用 JasperReports 我正在策划一个barchart我想在轴上的标签上添加自定义字符串 图片会更好地解释一切 Now
  • 在保存为 PNG 之前将新创建的 iOS 图像旋转 90 度

    我已经阅读了许多与此相关的答案 但我仍然无法让它工作 我有一个用户可以在其中签名的视图 它看起来是这样的 http d pr i McuE 我可以成功检索该图像并将其保存到文件系统 但我需要在保存之前将其旋转 90 度 以便签名从左到右读取
  • mysql_real_escape_string 和 array_map 返回空白字符串?

    我还没有学会如何使用参数化查询 根据本网站上的其他一些帖子 这是我明天早上绝对需要做的第一件事 并且我想将大量表单数据放入查询中 转义 我两次遇到过这个解决方案 POST array map mysqli real escape strin
  • Amazon SES 从实例配置文件元数据服务器检索凭证时出错。 (客户端错误:404)

    在让 AWS SES 正常工作时遇到一些问题 我想从我的网站向用户发送电子邮件 看起来凭证没有经过验证 但是我使用了从 IAM 生成的正确凭证 我还尝试了服务器根密钥 但它给了我同样的错误 我已经没有关于如何进一步解决 调试的想法 因此任何
  • Spring Batch 和 Cloudera hadoop 版本不兼容

    我正在尝试 Spring Batch 字数统计程序并遇到这样的版本问题 ERROR org springframework batch core step AbstractStep
  • 函数生成;更改其他功能的默认值(部分)

    我需要一个函数生成器 它接受另一个函数和该函数的任何参数并设置新的默认值 我以为 hadley 的pryr partial这就是那个神奇的功能 它完全符合我的要求 只是您无法更改新的默认值 所以在这里我可以改变sep在我的新paste函数
  • 线程安全数据集

    我想让 DataTable DataSet 的更新操作成为线程安全的 有大约 20 个线程 每个线程使用以下命令更新大约 40 行全局 DataTableRows Find pk 数据表的方法 每个线程将更新 DataTable 的不同行