仅锁定 ID

2023-11-24

我有一个方法需要专门运行一段代码,但我只想在确实需要时添加此限制。根据 Id 值(Int32),我将加载/修改不同的对象,因此锁定所有线程的访问没有意义。这是这样做的第一次尝试 -

private static readonly ConcurrentDictionary<int, Object> LockObjects = new ConcurrentDictionary<int, Object>();
void Method(int Id)
{
    lock(LockObjects.GetOrAdd(Id,new Object())
    {
       //Do the long running task here - db fetches, changes etc
       Object Ref;
       LockObjects.TryRemove(Id,out Ref);
    }

}

我怀疑这是否有效 - TryRemove 可能会失败(这将导致 ConcurrentDictionary 不断变大)。

一个更明显的错误是 TryRemove 成功删除了该对象,但如果有其他线程(对于相同的 Id)正在该对象上等待(锁定),然后具有相同 Id 的新线程进入并添加新的对象并开始处理,因为没有其他人在等待它刚刚添加的对象。

我应该使用 TPL 或某种 ConcurrentQueue 来对我的任务进行排队吗?最简单的解决方案是什么?


我使用类似的方法来锁定相关项目的资源,而不是一揽子资源锁定......它工作得很好。

你已经快到了,但你真的不需要从字典中删除该对象;只需让具有该 id 的下一个对象获得该对象的锁定即可。

您的应用程序中唯一 ID 的数量肯定有限制吗?那个限制是多少?

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

仅锁定 ID 的相关文章

  • 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

    我有以下逻辑 public void InQueueTable DataTable Table int incomingRows Table Rows Count if incomingRows gt RowsThreshold async
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • 链接 .Net 程序集

    这都是假设 所以请耐心等待 假设我正在用 C 编写一个名为 Foo 的工具 输出是 foo exe 我发现了一些我喜欢使用的非常棒的库 称为 Bar 我可以在我的项目中将其引用为 bar dll 当我构建项目时 我的输出目录中有 foo e
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • Guid.NewGuid().GetHashCode() 用于数据库

    这对于用作数据存储 SQL Server 的 ID 可靠吗 我会使用 guid 但我更喜欢数字值 A guid更有可能代表一个记录uniquely than a numeric value 随着 GUID 确保全球唯一性 GUID 可以跨数
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调

随机推荐

  • CodeIgniter + jQuery(ajax) + HTML5 Pushstate:如何使用真实的 URL 进行干净的导航?

    我目前正在尝试建立一个新网站 没什么特别的 漂亮又小 但我一开始就陷入困境 我的问题是干净的 URL 和页面导航 我想以 正确的方式 去做 我想要什么 我使用 CodeIgniter 来获取干净的 URL 例如 www example co
  • 在ios中重绘视图

    是否可以重绘整个视图 我需要它来完成我的语言设置 问题是语言只有在再次绘制视图后才会改变 就像您退出设置然后再次进入一样 语言也会更改 但是当你保存所有内容时 语言保持不变 那么 在发现语言更改后 我应该如何重新绘制我的视图 或者最好是整个
  • 滑动屏幕的某些部分

    I am trying to design one screen which contain some swipe part I have one screen with mapview listview and some text My
  • 使用 axios 获取本地 JSON 数据时遇到问题

    我正在尝试使用 axios 从本地 json 文件获取数据 在控制台下我什至无法得到回应 所以我想我应该在这里询问一下 js 文件 var loadData function loadData axios url filepath json
  • ASP.Net MVC 模型绑定 - 如何更改日期格式?

    我有这个应用程序 默认日期格式必须是dd MM yyyy 语言为巴西葡萄牙语 我已经将文化和 UI 文化设置为pt BR现在myDate ToShortDateString 返回我想要的日期 我可以毫无困难地展示它们 问题是 当用户在输入字
  • Yii2:如何在非 Restful API 上允许 CORS

    我正在 Yii2 Framework 上使用预构建的 API 不是 Restfull 它使用 JSON 数据进行响应 并根据用户类型和凭证令牌接受请求 现在我必须制作一个位于不同位置 域 的应用程序 这会导致 CORS 冲突 我的应用程序是
  • 如何在 matlab 中格式化复数以进行文本输出

    我有一个复数 我想使用 fprintf 命令将其输出为文本 我没有看到复数的格式规范 是否有捷径可寻 使用定点格式规范仅输出实部 根据文档fprintf and sprintf 数字转换仅打印复数的实部 所以对于一个复杂的值z你可以用这个
  • Django 错误消息“在定义中添加 related_name 参数”

    D zjm code basic project gt python manage py syncdb Error One or more models did not validate topics topic Accessor for
  • 如何处理 MS Word 添加的“特殊”字符?

    我想知道你如何清理 MS Word 中的特殊字符 例如 m 和 n 破折号以及弯引号 我经常发现自己从 Word 中复制客户端内容并粘贴到静态 HTML 页面中 但内容最终会出现奇怪的字符 因为特殊字符未转换为正确的 ACSII 代码 因此
  • 将字符串转换为 &strs 时,切片和显式重新借用之间有区别吗?

    下面两个例子等价吗 示例1 let x String new let y x 示例2 let x String new let y x 一种比另一种更有效率还是它们基本相同 如果是String and Vec 他们做同样的事情 在gener
  • Node.js/Async - 如何避免异步回调地狱?

    我是后端 Node Js 和 JavaScript Web 开发的新手 我发现回调中的回调可能会很痛苦 并且有一些模块可以避免这种情况 这些模块之一是异步的 https github com caolan async 我已阅读文档 但很难开
  • 如何在解决方案资源管理器上保留源文件夹层次结构?

    我在Linux上做了一个C 项目 我将源文件分组在许多目录中以自己组织 我使用 CMake 进行编译 每个子目录上都有一个 CMakeFiles txt srcs folderA Toto cpp Tata cpp folderB Foo
  • htaccess重写库

    我的根目录中有两个目录 dev and live 这些目录中的所有内容都有相对路径 例如 css style css or js home js 我希望能够使用 htaccess 更改根目录 以便相对路径变为 live css style
  • 将字符串数组转换为打字稿中的对象键

    我有下一个数组 const arrayData a b as const 该数组有下一个类型 ArrayType a b 我想获得与下一个类型一致的对象 type Type a boolean b boolean 预期对象 const re
  • 在Python中异步播放声音

    我有一个while loop让我的相机 带有 opencv 在物体移动时拍照 我也想调用一个函数来播放声音 但是当我调用并播放它时 它将在该执行时间内停止循环 我试过ThreadPoolExecutor但不知道如何将它与我的代码混合 因为我
  • 使用 gettext() 将 settings.LANGUAGES 与正确翻译的名称一起使用

    来自 Django 文档 如果您定义了自定义LANGUAGES设置 标记语言就可以了 作为翻译字符串 如 上面显示的默认值 但是 使用 假人 gettext 函数 不 中的一个django utils translation 你永远不应该导
  • 结构体总是分配堆栈还是有时分配堆?

    我的印象是 在 C 中 结构元素是在堆栈上分配的 因此从创建它们的方法返回时会消失 但是如果我将结构值放入列表中并返回它会发生什么 元素得以幸存 结构体实例有时会分配在堆上吗 internal struct Stru public int
  • file_get_contents 是否使用缓存?

    我有一个函数可以生成一个包含数据库内容的表 有些单元格具有自定义 HTML 我通过模板系统使用 file get contents 读取这些 HTML 小内容是相同的 但此操作可能执行 15 次 我限制每页 15 个表行 那么file ge
  • Lollipop 设置默认本地不起作用

    我在大多数 Android API 版本上运行此方法来使用语言 字符串等 设置应用程序 protected void setDefaultLocale Context context Locale locale Locale setDefa
  • 仅锁定 ID

    我有一个方法需要专门运行一段代码 但我只想在确实需要时添加此限制 根据 Id 值 Int32 我将加载 修改不同的对象 因此锁定所有线程的访问没有意义 这是这样做的第一次尝试 private static readonly Concurre