问题标签 [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 投票
1 回答
344 浏览

c# - 使用 LINQ 的可组合锁。任何人都可以看到这有什么问题吗?

我在玩 LINQ,我想出了以下想法来利用 C# Monadic 语法来组合锁。这似乎太简单了,所以我想让我将它发布在 StackOverflow 上,看看是否有人可以快速发现这种方法的任何主要问题。

如果您在原子实现中注释锁,您会看到帐户已损坏。

这个想法是关于能够在没有显式锁定的情况下对帐户进行操作。

0 投票
3 回答
2478 浏览

cpu - 什么时候使用自旋锁是个好主意?

似乎自旋锁并不是那么好,因为它们在等待(阻塞)时会浪费 CPU 周期。如果线程只是在等待唤醒信号时进入睡眠状态,那么 CPU 周期在旋转时不会丢失。

如果锁的持有时间很短,那么使用自旋锁可能会很好,那么它可能会使用更少的时间?如果这是真的,为什么?

0 投票
3 回答
3403 浏览

windows - 如何在 VC++ 中创建锁?

假设我正在实现一个关键部分并在 VC++ 中保护一些数组,我如何使用 VC++ 中的锁来做到这一点?

0 投票
5 回答
3200 浏览

java - 在 java 多线程中的实例上获得的锁

我读到Java中的锁是在实例(对象)的基础上获得的(在实例方法的情况下)
也可以在类的对象上获得锁(在静态方法的情况下)。

但我想知道一个特定对象一次可以获得多少个锁

一个对象一次可以拥有多个锁吗?
如果是,请举例说明。

请帮我理清我的概念。

0 投票
1 回答
1165 浏览

c++ - WaitForSingleObject 未锁定,仍然允许其他线程在 C++ 中更改值

我正在尝试WaitForSingleObject(fork[leftFork], Infinite);使用多个线程来锁定一个变量,但它似乎没有锁定任何东西

我设置Handle fork[5]然后使用下面的代码,但它似乎没有锁定任何东西。

我也尝试过WaitForMultipleObjects同样的结果。当我创建我使用的互斥锁时fork[i]= CreateMutex(NULL, FALSE,NULL);

我想知道这是否只对每个线程都有好处,或者他们是否共享它?

0 投票
2 回答
484 浏览

c# - 从多个线程向 DbSet 添加元素的方法

从多个线程调用此方法。现在我使用静态锁来避免2个线程同时保存数据。虽然这是错误的,因为我只想保存数据。catch 用于创建更新查询,以防插入(添加)由于条目已存在而失败。

如果我删除锁会发生什么。工作将如何SaveChanges?我的代码应该是什么样子?谢谢

0 投票
3 回答
225 浏览

mysql - 比较数据库及其锁

我有繁重的事务处理,并想了解有关如何在当前数据库中实现锁的信息。在零预算下工作,我的选择仅限于 mysql 5.5 和 postgres 9.0。

有没有比较锁的网站?

从文献中我知道您可以拥有只读和读写锁,并且处理锁的一种好方法是阻止数据的路径。这意味着阻塞 btree 的一部分。但我找不到关于这些数据库如何工作的细节。

非常感谢。

0 投票
5 回答
5022 浏览

java - 如何避免嵌套同步和由此产生的死锁

我需要在一个功能中锁定两个对象,当前代码如下所示;

如您所见,如果另一个线程使用 obj1 和两个反向运行这段代码,那么这是一个简单而直接的死锁方法。
有没有办法使用并发工具锁来避免这种情况?

我正在考虑维护对象及其锁的映射并验证它们是否可以使用,但似乎无法提出一种可以预测锁定顺序的干净方法。

0 投票
4 回答
7496 浏览

c - 试图获取 pthread_mutex_lock(&mutex) 的线程如果没有获得锁会怎样?

C 编程:

当一个线程尝试获取互斥锁但未能获取时会发生什么?

它会睡觉吗?

pthread_mutex_unlock(&mutex); 时是否会唤醒线程?叫做?

然后再次尝试获取锁?

0 投票
1 回答
4958 浏览

python - 在多线程应用程序中记录锁获取和释放调用

我正在尝试调试使用各种锁的多线程 Python 应用程序。

我的想法是装饰方法threading.Lock.acquire ()threading.Lock.release () , 并在其调用前加上以下内容:

其中log是一些全局日志记录对象-为了讨论。

现在理想情况下,日志条目中的名称“lock”应该在运行时派生,因此无论在日志上调用哪个锁对象,这些方法都将输出其名称、修饰的操作、当前线程、类和函数调用操作 (acquire | release)。

免责声明:我承认上面给出的代码对于任何这样的装饰器实现都是不够的。提供它只是为了说明我认为可以实现的目标。

有谁知道我是否可以装饰标准库方法,而无需修改线程库的原始源代码,即从我的调用应用程序代码中?

也许我在吠叫错误的树,并且有更好的方法来实现相同的目的,而不使用装饰器?如果确实如此,请提前非常感谢您的任何指导。

解决方案:(灵感来自lazyr)

以下代码记录了锁定操作,并为我提供了调用锁定操作的方法/函数的名称(我也在调整代码以使用条件及其附加的wait()notify()方法):

日志实例传递给 LogLock 的位置。init是用logging.Formatter定义的,如下所示给我调用线程的身份: