问题标签 [locks]

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 投票
4 回答
4951 浏览

java - 我应该同步侦听器通知吗?

我总是很犹豫是否公开我的锁,公开它们。我总是试图将锁限制在我的实现中。我相信,不这样做会导致僵局。

我有以下课程:

当 SomeClass 想要通知他的听众时,你会这样做:

或者

我会选择第二个选项。缺点是侦听器可以获取事件,即使它们已经未注册。好处是,侦听器回调正在等待的线程在想要取消注册侦听器时不会陷入死锁。我相信好处比坏处更重要,坏处可以很容易地记录下来。

所以这里的问题基本上是:你会暴露你的锁吗?

我的问题不是您是否会选择普通的 ArrayList、LinkedList、ConcurrentLinkedQueue、CopyOnWriteArrayList、...!您是否会介意监听器是否可以在未注册时收到通知。关键是你是否会把锁打开。这是关于避免或不避免死锁。

请分享你的想法。谢谢!

0 投票
2 回答
153 浏览

sql-server - 我如何为这个 SQL 获得正确的锁?

我的数据库是 SQL Server 2005/8。在预订系统中,我们对一个活动的预订限制为 24 个。存储过程中的此代码检查: - 当前用户 (@UserId) 尚未预订事件 (@EventsID) - 当前事件的当前预订列表低于 24 - 插入新预订。

问题是它不安全。两个用户可能同时执行测试并得出结论他们都可以预订。两者都插入一行,我们最终得到 25 个预订。

简单地将其包含在事务中是行不通的。我尝试将 WITH (UPDLOCK) 添加到选择中,希望其中一个会获取更新锁并将另一个锁在外面。那是行不通的。

0 投票
2 回答
204 浏览

java - 我如何在 ReentrantReadWriteLock ReadLock 和 WriteLock 上创建包装器

我有一个ReentrantReadWriteLock. 包含ReadLockReentrantReadWriteLock和 WriteLock 作为子类。

然后我必须能够做类似下面的事情

或者

是否有可能实现这一目标。

0 投票
1 回答
2117 浏览

mysql - 使用连接时的 MySQL 锁定

在 2 表连接查询中选择“FOR UPDATE”时,我对 mysql/innodb 锁定有疑问。例子:

2 表 - items, queue. queue.id是与 items.id(外键)的 1:1 连接。queue.status是带索引的枚举。queue 的行数很少,而 items 表相对较大。

  1. 表中选定的行会被排items他锁定吗?
  2. 还获得了哪些其他锁?(显然,queue表中所有具有 stats='new' 的行除外)。
  3. 是否有任何可能导致死锁的共享锁。我在某处读过 insert 将下一个键共享锁放在自动增量索引上,然后在使用SELECT ... FOR UPDATE(在同一个事务中)锁时将其升级为独占,很容易发生死锁 - 2 个线程可以获得共享锁,然后他们都将等待对方释放锁以获得排他锁。在这种情况下是否可能(也听说外键使共享锁)。
0 投票
2 回答
101 浏览

java - java类中的锁

假设我们有下一个示例代码:

问题是:

假设对于在此代码部分上运行的某个线程正在退出 while 循环的条件并且 lock1 可用,那么线程是否有可能检查循环的条件但仍然不会获得锁?

还是在这种情况下保证如果检查条件,线程将获得锁?

0 投票
1 回答
80 浏览

java - JAVA多线程中的同步和对象锁

假设一个线程正在运行同步方法,因此获得了对象实例的锁。还假设线程从运行状态进入可运行状态。那么该对象锁会发生什么。它是在线程进入可运行状态之前释放的吗?请帮我一个正确的答案:)。

在此先感谢,马亨德拉雷迪。

0 投票
2 回答
710 浏览

java - Java Locks 同步方法烘焙传输

您好,我有一个 Java 应用程序,它需要输入数量的操作来执行,并且它为每个操作运行不同的线程:

现在我需要对账户进行并发转账,其中 Bank 类的定义如下:

当程序执行操作时:

我收到了一系列类似此消息的错误:

你觉得同步好吗?

有什么建议么?非常感谢


更新(我无法回答自己)

主循环中存在概念错误(对于 i..to n_operations),函数正在传递“int id = i;” 作为source_account的参数,而n_operation数大于数组的最大值,所以编译器合理地说:ArrayIndexOutOfBoundsException。

作为最后的贡献,我请您检查同步是否正确完成,因为我不是多线程专家。再次感谢,很抱歉今天早上提出的问题很糟糕......

0 投票
2 回答
182 浏览

sql-server - 我是否需要 SQL Server 中的此并发更新方案的事务/锁

我想知道在以下情况下我是否真的需要事务/锁。我可以执行 3 个可能在任意数量中并发的操作(即我可以运行两个任务 1 和三个任务 2):

任务1:

任务 2:

任务 3:

我应该如何实现上述内容以确保我永远不会破坏 table_2 的字段counter

非常感谢你!

0 投票
2 回答
162 浏览

c++ - 当 cond 为真时,在以下情况下,锁会发生什么?

我有这个代码,考虑到 cond 是真的,现在任何人都可以回答在以下情况下锁会发生什么: -

谢谢

0 投票
1 回答
1613 浏览

c++ - 在 Windows 上的 c++ 中使用和在 wxwdigets 中创建线程

我正在阅读与在 Windows 上使用 c++ 中的 wxwidgets 进行线程创建相关的内容,但是我无法理解以下代码片段的含义:-

以下内容是该项目的一部分:-

谢谢