问题标签 [synclock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1784 浏览

.net - 使用 SyncLock 同步访问 List(of T)

我有一个包含多线程应用程序中使用的 List(of T) 的类。我有三种方法 Get、Add 和 Remove,这些方法可以访问和修改 List(of T)。每当我查询所需对象以及添加或删除对象时,我都使用 SyncLock 锁定 m_List。 但是,我很好奇当我添加对象或删除对象而不是搜索所需对象时,通过简单地锁定 m_List 是否可以提高性能?

0 投票
2 回答
2728 浏览

c# - 应该在属性上使用同步锁吗?

我一直在阅读,并在是否应该或不应该在属性上使用同步锁的问题上得到相互矛盾的答案。

我有一个多线程应用程序,需要跨线程获取/设置实例对象的属性。它目前是在没有使用同步锁的情况下实现的,到目前为止我还没有注意到任何问题。我在常见的静态方法上使用同步锁,但我想以线程安全的方式正确实现我的实例类。

任何反馈将不胜感激。

0 投票
2 回答
2324 浏览

vb.net - 写入时同步锁定?读?或两者?

假设我有一个字节数组,Private Data as Byte(). 这个数组在一个类中是私有的。该类提供用于读取和写入的公共函数Data

这个类可以被多个线程访问,所以我想避免读取和写入不会同时发生的情况。

目前,我使用 SyncLock 来避免问题。我可以SyncLock Data只放入写入功能,还是需要放入读取功能?或两者?

我没有具体的代码示例。我只是好奇,如果写入函数的 SyncLock 将使写入首先具有对它的独占访问权限,那么锁定读取和写入函数是否有任何好处。

0 投票
4 回答
6931 浏览

vb.net - 我应该在这段代码中 SyncLock 什么,以及在哪里?

我有一个类,其中有两个方法,一个调用一个创建并执行多个线程的类,另一个是一个事件处理程序,用于处理这些线程完成时引发的事件(然后再次调用第一个方法)。

我了解处理事件的方法在引发事件的线程中运行。因此,我SyncLock是一个成员变量,表示有多少线程正在运行并从中减去一个:

所以我有几个问题:

主要问题:我是否应该_availableThreads在类中的任何地方都同步锁定 - 即在创建线程的方法中(创建线程时加 1)

与此问题相关的附带问题:

  1. 我通常SyncLock是当前实例,但我已经看到了该类型的代码,那么同步锁定(当前实例)和SyncLock之间有什么区别?MeGetType(Me)

  2. 两者之间会有性能差异吗?有没有什么更小的我可以锁定上面不影响其他任何东西的东西——也许是一个单独的“挂锁”对象,其唯一目的是在一个类中锁定东西?

注意: 的唯一目的_availableThreads是控制在任何给定时间可以运行多少线程以及线程处理可能需要数小时才能运行的作业。

代码:

0 投票
1 回答
2566 浏览

asp.net - 带同步锁的 asp.net 多线程

我有一些测试代码,我在我的 asp.net 网站的每个页面加载时运行

这是代码

“dotrace”只是将一条记录添加到数据库中的日志表中

现在正确的结果是我应该在数据库中按顺序“输入”、“退出”、“退出”

但实际上,当我查看数据库时,我看到前 2 个“进入”然后 2 个“退出”等,这意味着多线程工作正常,但同步锁不是正确的吗?

以及如何解决这个问题?真正的代码将向数据库添加记录,并且可能从不同会话的几页调用,但相同的代码不能同时运行两次

我很感激任何人的帮助

非常感谢您!!!

编辑:

作为对 Sashas 精彩帖子的回应,我将代码更改为一个类(它在一个模块中),现在它看起来像这样:

现在它在 80-90% 的时间内都有效。在页面加载时我有:

如果我一次打开多个页面,它们仍然会发生冲突。但如果我是对的,那么问题现在不在于同步锁,而在于 httpruntime.cache,因为在使用标准属性时,在一页上,代码可以 100% 工作。

那么我如何确保 2 个线程,即使来自完全不同的会话,也不会同时运行 trylock?

谢谢大家帮忙

0 投票
2 回答
1740 浏览

asp.net - asp.net 全局同步锁对象

asp.net 中有没有办法确保某个线程子不会同时运行两次,无论如何?

我现在的代码是

如果我在每一页上运行这段代码,那么代码会重叠几次。代码中的 DoTrace 函数只是将消息写入表中。

表格中的消息应该按顺序(进入、退出、退出)一次又一次地出现,但实际上并非如此。我就像进入,退出,进入,退出,退出......

这意味着同步锁未完成。真的吗?

如果是这样,我们如何跨请求和跨会话在代码块上实现完整的同步锁?

编辑:我需要这个锁,因为真正的代码将根据数据库中的邮件类型列表发送电子邮件。在发送每种邮寄类型后,对其进行标记,然后继续进行下一次邮寄。我不能在处理过程中,另一个线程应该将此邮件视为未处理。

请指教

0 投票
3 回答
1487 浏览

.net - 空对象上的 SyncLock

有没有简单的方法来同步锁定一个可以为空的对象?

在您提出要求之前,是的,我知道对空变量执行 SyncLock 是不合逻辑的。但是,这将简化我的代码,因为现在,我别无选择,只能在调用 SyncLock 之前对所有地方执行空检查。

0 投票
1 回答
1331 浏览

.net - SyncLock 如何在 .Net 中工作

我有一个由多个线程共享的对象列表,它有时会在尝试时生成 IndexOutOfRangeException Clear。在寻找解决方案时,我发现我应该在访问列表时使用 SyncLock。

但是我的问题是lockObjectSyncLock块中的重要性是什么,例如在清除myList 时我可以使用

或 lockObject 应该与 myList 不同?

编辑:

我对 sysnclock 的看法是“为指定为 lockObject 的对象获得了锁”。如果我将要清除的列表指定为lockObject,编译器不应该在清除它之前获得对列表的独占访问权限吗?

0 投票
1 回答
2310 浏览

.net - .NET 多线程同步与监视器

我正在为我正在编写的多线程服务构建一个稍微更有效的连接池,以便在我的服务和它的 SQL 数据库之间进行通信。基本上归结为,我的课堂上有这段代码:

所以这段代码工作得非常好,我可以在不同的线程中运行 500 条 select 语句,就像计算机可以使它们一样快,它会打开 8 个不同的连接(可能是由于我的计算机的速度,较慢的 PC 可能会打开更多)。问题是,在 DBSelect 函数中,我在 Try/Catch 中有一行用于释放监视器 Enter 因为有时结束同步锁会丢弃我的对象上的锁(在这种情况下,不需要该行并引发异常),有时该对象仍处于锁定状态,并且将在不运行该行的情况下保持永久锁定(在这种情况下,它会使用它并成功通过)。我无法弄清楚为什么有时它会释放它,有时它不会。有任何想法吗?

0 投票
1 回答
211 浏览

vb.net - 远程缓存对象

我在单例远程对象 MBRO 中使用以下代码。此函数仅在服务器端调用。

LoadRecord 函数只是从数据库表中读取一行并将字段复制到一个小数据结构中。

问题

  • 此代码多线程安全吗(在远程环境中)
  • 不同的代码是否有任何性能优势