问题标签 [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 回答
1096 浏览

vb.net - 我应该使用 SyncLock 还是 Interlocked?

有人可以帮我理解同步锁语句是如何工作的吗?我知道这里还有其他一些关于同步锁的帖子,但我无法很好地理解答案。我正在尝试启动并运行一个简单的多线程示例,但遇到了麻烦。起初我尝试了以下代码。

我有一个带有两个按钮的简单 winform。我使用第一个按钮创建 Class1 的 obj 并在新线程中启动 MainLoop 方法。我使用借调按钮来调用 addInt 方法。但是,该代码可能适用于一两次,然后锁定。在阅读了该表单的其他问题后,我意识到 synclock 语句的 lockobject 并没有像我最初想象的那样工作,它只是一个不应该更改的任意引用对象。我认为 syncLock 语句只是在将处理器控制权传递给新线程之前强制执行整个代码块。所以我尝试使用另一个锁定对象,但现在它只是锁定了。

有人可以解释为什么上面的代码不起作用吗?在类似的帖子中,有人提到 Interlocked 类会很有用,但我不知道它是什么或如何使用它。一个简短的“傻瓜互锁类”解释也将不胜感激。

0 投票
1 回答
1954 浏览

vb.net - SyncLock 和很多线程 VB .Net

我的情况是我有以下方法,它使用 SyncLock 来确保一次一个线程写入文件。

我正在使用同时运行的许多线程:

我的问题是当 X 很大时(比如 500),一个或多个线程同时写入文件。为什么会这样?

0 投票
1 回答
373 浏览

vb.net - 防止两个线程在 vb.net 中同时运行

我是 .net 线程的新手,很难找到可以使用的好例子。我在这里读文章。托管线程最佳实践但我仍然不清楚。现在我有一个程序,我试图让两个线程同时运行但做不同的事情。我有一个线程在做它应该做的事情,但是当我启动我的第二个线程(我将其命名为 PrintThread)时,我有 PrintThread 和 Main Thread 运行相同的代码行,我是否应该查看 syncLock 语句以避免这种情况?

0 投票
0 回答
250 浏览

c# - 使用 SyncLock/lock 时访问被拒绝

这个错误并不常见,到目前为止我只在一台计算机上发现了这个错误。它可以复制,但我在那台计算机上没有开发环境。在对象上调用 SyncLock/lock 时出现错误。

什么会造成这种错误?

0 投票
1 回答
537 浏览

vb.net - 同步列表或 ListItem

微软参考: http: //msdn.microsoft.com/en-us/library/3a86s51t (v=vs.71).aspx

“SyncLock 语句中表达式的类型必须是引用类型,例如类、模块、接口、数组或委托。”

场景:多个线程读取和编辑列表。

我知道这将避免竞争条件:

但这会吗?

0 投票
1 回答
8156 浏览

vb.net - 从两个不同的线程同步锁定同一个对象

基本上我有一个全局变量,例如...

然后我有两个异步函数,比如......

这两个函数都由 Task.Run() 运行。

我想在这两个函数中使用 SyncLock。但是,MSDN 站点上给出的所有示例仅显示了在单个函数中使用 SyncLock 的示例。因此,我不能简单地从 MSDN 描述中判断我是否可以在全局变量上跨两个不同的函数使用 SyncLock。

我想做的是这样的:

这样做可以吗?bleh() 会阻止 Meh() 更改 int1,反之亦然?谢谢!对不起VB大声笑。

0 投票
2 回答
3668 浏览

button - 使用按钮增加七段

我的 fpga 是 spartan 3E-100 Cp132。我有四个按钮作为我的输入,我想通过使用它们来增加电路板 7 段上的四个数字。VHDL代码如下:

每个按钮都应将相应的 7 段数字(b1 --> 最右边的数字和 b4--> 最左边的数字)加一。问题是当我按下按钮时,它会完成这项工作,但不会将其增加一,而是增加一些任意数字。原因是它在时钟 2 的每个上升沿递增 1,并且由于该时钟的频率,它发生得太快。我怎样才能摆脱这个问题?我为按钮尝试了几个去抖动代码,但它们并没有太大帮助。我完全被困在这里。我的意思是应该有办法做到这一点,但是怎么做呢?顺便说一句,我在上面的代码中使用的去抖动代码是

因此,任何帮助将不胜感激,在此先感谢!

0 投票
2 回答
51 浏览

vb.net - 在我的单身人士中过度检查支持字段的空值?

下面的代码代表我在我的应用程序中使用的单例。让我们假设它_MyObject = New Object代表了一个非常昂贵的数据库调用,在任何情况下我都不想多次调用它。为了确保不会发生这种情况,我首先检查是否_MyObject支持字段为空。如果是,我会闯入一个 SyncLock 以确保一次只有一个线程可以进入这里。但是,如果两个线程在单例实例化之前通过了第一次空检查,则线程 B 将最终坐在 SyncLock 处,而线程 A 创建实例。线程 A 退出锁后,线程 B 将进入锁并重新创建实例,这将导致进行昂贵的数据库调用。为了防止这种情况,我添加了对锁中发生的支持字段的额外空检查。这样,如果线程 B 设法最终在锁处等待,它将通过并再做一次空值检查,以确保它不会重新创建实例。

那么真的有必要做两次空检查吗?摆脱外部空检查并从 Synclock 开始是否会一样?换句话说,线程锁定变量是否与让多个线程同时访问支持字段一样快?如果是这样,外部空检查是多余的。

0 投票
1 回答
156 浏览

asp.net - 模块构造函数中的同步?

来自立即调用静态块的Java。在 VB.NET (ASP.NET) 中,在调用第一个方法之前不会调用模块构造函数。所以,这引出了一个问题,如果我在模块的构造函数中执行初始化,是否需要将它包装在同步时钟中?

0 投票
1 回答
168 浏览

.net - 出队与入队不同

你好,stackoverflow!我将切入正题:我有一个使用 TCP 的服务器/客户端程序,我在用于放入读取数据包的队列中遇到了一些问题。一旦读取数据包,它就会被排入队列,并且如果程序不忙于处理数据包,它将处理它并将其从队列中取出。

下面是对数据进行排队的代码:

请注意,我正在将所有数据包写入每个自己的文件(这是出于调试目的)。我使用 ThreadPool 来处理不同线程上的 readqueue。

这是处理队列的方法:

TestReadQueue 中的文件与 Test 文件夹中的文件不同。我不知道为什么。而且我知道所有数据都被接收,因为排队的数据与客户端发送的数据相同。

在这里你可以看到它的不同: http: //gyazo.com/feb4a192e47f262a9f23812ae8bc6cf6

当我使用 ThreadPool 时不会出现这个问题,但是当我不使用 SyncLock 时就没有必要了。谁能告诉我出了什么问题?