问题标签 [locking]

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 投票
5 回答
29385 浏览

c# - C# 中是否有“尝试锁定,如果超时则跳过”操作?

我需要尝试锁定一个对象,如果它已经锁定就继续(超时后,或者没有它)。

C# lock 语句被阻塞。

0 投票
3 回答
597 浏览

concurrency - 文档服务器:处理并发保存

我正在实现一个文档服务器。目前,如果两个用户打开同一个文档,然后对其进行修改并保存更改,则文档的状态将是未定义的(第一个用户的更改被永久保存,或者第二个用户的更改)。这完全不能令人满意。我考虑了解决这个问题的两种可能性:

第一种是第一次打开文档时锁定,关闭时解锁。但如果与服务器的网络连接突然中断,文档将处于永久锁定状态。显而易见的解决方案是定期向服务器发送 ping。如果服务器没有连续接收到来自特定客户端的 K 个 ping (K > 1),则由该客户端锁定的文档将被解锁。如果该客户再次出现,文档将再次被锁定,如果有人尚未锁定它们。如果客户端应用程序(在 Web 浏览器中运行)意外终止,这也可能会有所帮助,从而无法向服务器发送“退出,解锁我的文档”信号。

二是存储不同用户保存的同一文档的多个版本。如果快速连续地对文档进行更改,系统将提供合并版本或选择首选版本。为了优化存储空间,应该只保留文档差异(就像源代码控制软件一样)。

考虑到与服务器的连接有时可能很慢且无响应,我应该选择哪种方法?应该如何确定参数(ping 间隔、快速连续间隔)?

PS 不幸的是,我无法将文档存储在数据库中。

0 投票
17 回答
142417 浏览

multithreading - 什么是死锁?

在编写多线程应用程序时,最常见的问题之一是死锁。

我对社区的问题是:

  1. 什么是死锁?

  2. 你如何检测它们?

  3. 你会处理它们吗?

  4. 最后,您如何防止它们发生?

0 投票
14 回答
28823 浏览

perl - 如何在 Perl 中锁定文件?

在 Perl 中创建文件锁的最佳方法是什么?

最好是在文件上聚集还是创建一个锁定文件来放置锁定并检查锁定文件上的锁定?

0 投票
5 回答
4867 浏览

sql - 如何避免数据库中的读锁?

如何避免数据库中的读锁?

欢迎回答多个数据库!

0 投票
4 回答
7152 浏览

sql - 如何在某些 SQL 行上运行进程时锁定它们?

VB.NET我的工作有一个用编写的财务应用程序,SQL多个用户可以同时处理该应用程序。

在某些时候,一个用户可能决定发布他们(可能还有其他人)当前正在处理的一批条目。

显然,在Post 过程启动,我不再希望任何其他用户在该批次中添加编辑删除条目。

我已经看到我可以通过在 Post 过程开始时打开 SQL 事务来锁定所有数据,但是该过程可能相当长,我不希望在完成该功能可能需要的几分钟内打开事务.

有没有办法只锁定我知道需要从 VB.NET 代码操作的记录?

0 投票
4 回答
62925 浏览

c# - 是 C# 中的 bool 读/写原子

在 C# 中访问bool字段是原子的吗?特别是,我是否需要锁定:

0 投票
10 回答
35094 浏览

c# - C#中的lock关键字

我从 MSDN 了解 lock 关键字的主要功能

lock 语句(C# 参考)

lock 关键字通过获取给定对象的互斥锁、执行语句然后释放锁来将语句块标记为临界区。

什么时候应该使用锁?

例如,它对多线程应用程序很有意义,因为它可以保护数据。但是当应用程序不分离任何其他线程时是否有必要?

使用锁是否存在性能问题?

我刚刚继承了一个在任何地方都使用锁的应用程序,它是单线程的,我想知道我应该把它们留在里面,它们甚至是必要的吗?

请注意,这更像是一个常识性问题,应用程序速度很好,我想知道这是否是将来要遵循的良好设计模式,或者除非绝对需要,否则应该避免这种情况。

0 投票
5 回答
5169 浏览

c++ - 有没有人尝试过 C++ 的事务性内存?

我正在查看英特尔的“whatif”站点和他们的事务内存编译器(每个线程都必须进行原子提交或回滚系统内存,就像数据库一样)。

这似乎是替换锁和互斥锁的一种有前途的方法,但我找不到很多推荐。这里有人有意见吗?

0 投票
7 回答
3595 浏览

c# - 想要写入文件,但可能同时有多个写入者,需要锁定

在 asp.net Web 应用程序中,我想写入文件。该函数将首先从数据库中获取数据,然后写出平面文件。

我能做些什么来确保只发生 1 次写入,并且一旦发生写入,可能想要写入文件的其他线程在写入发生后就不会发生。

我只想在 15 分钟内没有写完的情况下才写完。

我知道有一个 lock 关键字,所以我应该把所有东西都包在一个 lock 中,然后检查它是否在 15 分钟或更长时间内更新,反之亦然?

更新

工作流程:

由于这是一个 Web 应用程序,因此多个实例将是查看特定网页的人。我可以使用内置缓存系统,但是如果 asp.net 回收,重建缓存会很昂贵,所以我只想将它写到一个平面文件中。我的另一个选择是创建一个 Windows 服务,但这是我想要的更多管理工作。