问题标签 [readwritelock]

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 回答
347 浏览

java - java - 自己的 SeqLock 实现,避免自旋锁会更好吗?

我创建了自己的简单、紧凑的 ReadWriteLock 实现。第一个在尝试获取读锁时使用自旋锁。如果设置了锁定位,则第二个通过在旋转之前暂时获取写锁来避免自旋锁。这样,它会停止执行,直到写锁被释放。现在我的问题是哪个更有效,更适合常用?(多核和非多核机器)

编辑:它将用于我的 Android 应用程序。所以我必须在提供我需要的 ReadWriteLock 实现的同时保持它的紧凑性。ReentrantReadWriteLock 对我的应用程序来说很重。另外,有人可以提出更好的方法吗?

编辑:实施细节取自此链接

第一个实现如下:

第二种实现如下:

预期的用法是:

读者话题:

作家主题:

有什么更正吗?哪一个更好?

0 投票
0 回答
431 浏览

c# - 使用 WebClient.DownloadFileAsync() 写锁

我的网络系统有问题,我相信这是因为文件上发生了一些读/写锁。如果文件已打开并需要写入,则会导致进程锁定并冻结我的系统的某些部分。这都是猜测,但以空文件的结果,我相信这是原因。

我在我的应用程序中使用以下代码,其中url是要下载的 URLfile字符串,是保存下载内容的位置字符串。使用我的以下代码,有没有一种方法可以检查文件是否已打开/正在使用,并且仅在可以写入时才写入文件?

对不起,如果还有其他事情发生,或者我错过了一些东西。太感谢了!

0 投票
2 回答
1929 浏览

mysql - 当表被读/写锁定时如何读取一行?

我在 MySQL 5.6.13 上运行这些查询。我使用可重复的读取隔离级别。该表如下所示:

在此处输入图像描述

在会话 A 终端中,我发布了以下声明

在会话 B 终端中,我尝试将 ACL 电缆的值 lead_time 更新为 2。但由于会话 A 的先前 UPDATE 命令尚未提交(并且会话 A 对制造商表具有排他锁),因此此更新等待。这个我能理解。

但是当我尝试在会话 B 上执行 SELECT 语句时,如下所示,

它正确查询制造商表并给出该行。这怎么可能发生?因为会话 A 仍然在制造商表上持有排他锁,并且据我所知,当在表上持有排他锁时,在提交前一个事务之前,没有其他事务可以读取或写入它。

0 投票
1 回答
1098 浏览

c# - Read-write synchronization class implementation

I am writing a read-write synchronization class, and would like some advice on what I to do next. For some reason, it sometimes allows a Read to happen in the middle of a Write, and I cannot find the reason.

This is what I want from this class:

  • Reads not allowed at the same time as writes.
  • Multiples reads can happen at the same time.
  • Only one write can happen at a time.
  • When a write is needed, all already executing reads continue, no new reads are allowed, when all reads finish the write executes.

I know that .Net framework has a class to do this... but what I want is to understand and to reproduce something like that. I'm not reinventing the wheel, I am trying to understand it by making my own wheel... happens that my wheel is kinda squared a bit.

What I have currently is this:

This is my test program... when something goes wrong it prints the lines in red.

What is wrong with all this... any advice on how to do it correctly?

0 投票
1 回答
1592 浏览

java - 使用 java FileChannel FileLock 防止文件写入但允许读取

我想我误解了 FileChannel 的锁定功能是如何工作的。

我想对文件进行独占写锁定,但允许从任何进程读取。

在运行 Java 7 的 Windows 7 机器上,我可以让 FileChannel 的锁工作,但它会阻止其他进程的读取和写入。

如何实现不允许写入但允许其他进程读取的文件锁定?

0 投票
1 回答
132 浏览

sql - 并发控制中的 write_lock 和 read_lock 有什么区别?如何在 PostgreSQL 中实现 read_lock?

write_lock 和 read_lock 的并发性有什么区别?write_lock 允许什么?read_lock 允许什么?在 PostgreSQL 中,write_lock 可以用 FOR UPDATE 来实现

如何在 PostgreSQL 中实现 read_lock?

0 投票
1 回答
418 浏览

java - 如何处理 MongoDB 中的贪婪写锁定?

我的问题 -有没有办法同时读取和写入 MongoDB?还是让 MongoDB 阅读器变得贪婪?

我有一个使用 MongoDB 作为数据库的 Web 应用程序。在我的应用程序中,我有一个正在监听的串行事件。在此串行事件中,我创建了一个新线程来处理该事件。在线程中,解析来自 serial 的字符串并创建一个对象,然后将其写入 mongo 数据库(创建一个新文档并将其添加到特定集合中)。

但是,在发生此串行事件时,我还尝试从数据库中读取数据并更新图表以显示来自该集合的新传入数据。问题在于,由于 MongoDB 对编写器很贪心(请参阅http://docs.mongodb.org/manual/faq/concurrency/),因此似乎永远不允许发生读取。

我的系列事件大约每秒发生 2/3 次。我的阅读速度也大约每秒 2 次。数据需要保持写入数据库,以便所有客户端都可以访问它,而不仅仅是接收串行事件的客户端。

所以我的问题是,有没有办法让我的阅读我可以将 MongoDB 上的锁更改为读者贪婪吗?或者有没有一种方法可以在不影响速度的情况下同时读写?分片是否可以解决这个问题(我对分片了解不多,所以不确定这是否能解决我的问题)?

如果您想发布任何代码,请告诉我!任何意见或解决方法将不胜感激!

0 投票
1 回答
131 浏览

multithreading - 如何在 Lisp 中获取读写锁而不释放它?

我正在使用 Clozure CL 编写应用程序。在应用程序中,我需要写几个文件,所以我为每个文件做了一个读写锁。

现在我正在尝试编写一个退出函数。它检查是否所有文件写入都已完成,然后退出。基本上它的工作原理如下:

  1. 获取所有文件读写锁
  2. 退出覆铜板

我阅读了Clozure CL 文档,但找不到像抓取写入锁这样的功能。我只能找到“grab-lock”、“with-read-lock”和“with-write-lock”。'grab-lock' 对读写锁不起作用,另外两个会自动释放锁。那么如何获取所有文件读写锁(而不是释放它们)并退出应用程序?

0 投票
1 回答
94 浏览

java - 如何使两个文档根据彼此的输入实时更新?

假设有两个抽象文档对应JTextFields(两个JTextFields是不同的变量)。

假设用户在 JtextField1(文档 A)中输入数值,它应该在运行时相应地更新另一个 JTextField2(文档 B)。如果用户在同一程序运行时在 JTextField2(Document B) 中输入数值也是如此,它应该更新 JTextField1(Document A)。

我尝试通过使用 Document Listener 来解决这个问题,但是,它仅适用于在运行时更新一个文档(A 更新 B 或反之亦然),而不是两者(或准确地说是彼此),因为它提供了死锁。我应该使用 DocumentFilter 来解决这个问题吗?不过,我不知道如何将它应用于这种情况。我尝试通过使用 FocusListeners 并在字段不在焦点时禁用 DocumentListener 来避免死锁/写锁定问题,但这是一种非常幼稚的方法,因为它完全不处理线程(如果这是问题的话)。选择另一个字段时创建一个单独的线程就足够了吗?不过,我对多线程没有真正的了解。我将不胜感激有关此问题的某种建议。

代码: http: //pastebin.com/qqYPXcAf

我正在尝试重新创建 photoshop 的类似 GUI 功能,以像素为单位更新宽度/高度大小,以便在用户输入的运行时保持 AR(图片: http: //puu.sh/9L07v/c745e85867.png

0 投票
1 回答
1612 浏览

java - 同步搜索和修改

允许从列表(或其他数据结构)上的多个线程进行搜索,但防止对列表的搜索和对不同线程上的列表的编辑交错的好方法是什么?我尝试在搜索和编辑方法中使用同步块,但是当尝试在多个线程中运行搜索时,这可能会导致不必要的阻塞。

编辑:ReadWriteLock 正是我想要的!谢谢。