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

java - 如何使用java同步文件操作?同步还是锁定?

我使用 JSCH 库创建了一个用于读取和写入远程位置属性文件的应用程序。

我想同步写操作。

这是我的代码,

这就是我要的

  • 如果用户尝试写入 Web 应用程序上的属性文件说“A”,则尝试写入同一个 Web 应用程序的同一文件的所有其他用户应该等待,但另一个用户可以写入同一个 Web 应用程序或文件的另一个文件在另一个 webapp 上具有相同的名称。

    同步方法可以完成所有这些工作吗?它如何识别 webapp 和属性文件?

我们需要同步读写操作吗?

如何在这种情况下实现锁定?

注意:我看到了关于并发的不同问题,但这些问题并没有消除我的疑虑,这就是为什么要问新问题,请帮助我对此进行澄清

0 投票
2 回答
630 浏览

java - 写时读锁

我需要帮助来理解以下代码:

如果我们在上面的代码中不使用 Read Locks 会发生什么?喜欢 :

  1. 当我们只写数据时,我们真的需要读锁吗?
  2. 上面两个代码有什么区别?
  3. 我们是否应该使用读取锁来访问对象(composedPredicate)进行空检查?
0 投票
0 回答
83 浏览

c# - 实现 ac# 读写锁,其中一些读取产生写入

我必须实现一些涉及由不同线程访问的共享资源的.Net 代码。原则上,这应该通过简单的读写锁来解决。但是,我的解决方案要求某些读取访问最终会产生写入操作。我首先检查了ReaderWriterLockSlim,但它本身并不能解决问题,因为它要求我提前知道读操作是否可以变成写操作,而这不是我的情况。我最终选择了简单地使用 ReaderWriterLockSlim,当读取操作“检测到”需要执行写入操作时,释放读取锁并获取写入锁。我不确定是否有更好的解决方案,或者该解决方案是否会导致一些同步问题(我有 Java 经验,但我对 .Net 相当陌生)。

下面的一些示例代码说明了我的解决方案:

0 投票
1 回答
154 浏览

java - 我使用 ReentrantReadWriteLock 有什么问题?

我有麻烦ReentrantReadWriteLock。当我尝试擦除文件时线程挂起。我有一个预定的读取操作和最终的写入操作(当用户按下按钮时),它们使用ReentrantReadWriteLock. 下一个代码看起来不适合使用,抱歉,为简单起见,我将所有内容放在一个地方。

并像这样编写操作:

wipeFile()方法第一次触发时,一切正常。但是从第二次尝试开始,它就挂了lock.writeLock().lock();我试图wipeFile()从另一个线程调用方法,因为有人写道,写锁不应该在具有读锁的一个线程中使用。

但这无济于事,另一个线程也挂起。

那么,问题是我对 ReentrantReadWriteLock 的使用有什么问题?

0 投票
2 回答
12945 浏览

multithreading - 何时或为什么应该在 RwLock 上使用互斥锁?

当我阅读 and 的文档时MutexRwLock我看到的区别如下:

  • Mutex一次只能有一个读者或作者,
  • RwLock一次可以有一个作家或多个读者。

当您这样说时,RwLock似乎总是比 更好(更少限制)Mutex,那我为什么要使用它呢?

0 投票
1 回答
777 浏览

locking - 实现写优先读/写锁

我有一个互斥库,并且正在尝试实现一个写优先锁。我正在看这个例子:

https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock

我了解读优先锁,但我不了解写优先锁。有人可以解释如何实现吗?

具体来说,我不明白这部分:

我也不明白这个标志w是通用的,还是每个进程只是一个不同的标志。我猜是前者。

例如,这里我们看到了获取读锁的算法:

但这是什么wait c, m意思?这不能意味着等待同时锁定cm,因为我们已经m在步骤 1 中锁定了。

而且,对于Set w to true- 这是否意味着w必须在所有流程或仅此流程中设置为 true?

0 投票
1 回答
49 浏览

java - 正确使用读写锁

我有一个要求如下:

1) 具有所有静态方法和静态列表的类。这个列表存储了一些我对其执行一些操作的对象。

2) 现在这个操作是从多个线程调用的。

3) 此操作调用不共享任何公共数据,因此此方法不同步。

4) 现在,每当这个列表用新对象更新时,我必须停止这个操作调用。

可能的解决方案 :

1) 使 performOperation() 和 updateList() 同步。但是 performOperation() 被调用的频率太高,而更新列表频率太低。

2)使用读写锁。在 performOperation() 中使用读锁,在 updateList() 中使用写锁。示例如下所示:

那么哪种解决方案更好呢?这是读写锁的正确用法吗?为什么我对方法 2 感到困惑是 performOperation() 中没有需要读访问或写访问的数据。我只是在更新列表时无法调用此方法。所以我不确定它是否适合使用读写锁。

0 投票
1 回答
245 浏览

c - 安全删除并发链表中的节点

我目前正在阅读 APUE 这本书。当我阅读关于 pthread reader/writer-lock 的章节时,我有一个关于它使用 reader/writer-lock 实现并发队列的问题。

我的问题是这个实现如何确保 astruct job只从链表中删除一次。据我了解,可以安排两个线程,使它们就在 line 之前pthread_rwlock_wrlock。然后struct job *jp可能会被释放两次。如果struct job *是动态分配的数据结构,这可能会导致双重释放错误。有什么建议吗?

0 投票
1 回答
220 浏览

python - 写锁定的文件有时找不到内容(打开腌制的熊猫数据帧时)-EOFError: Ran out of input

这是我的情况:我需要在一个集群上运行 300 个进程(它们是独立的),它们都它们的一部分数据添加到同一个 DataFrame 中(因此它们还需要在写入之前读取文件)。他们可能需要在整个运行时多次执行此操作。

所以我尝试在包中使用写锁定文件portalocker。但是,我遇到了一种错误,我不明白它来自哪里。

这是每个进程将写入同一文件的框架代码:

上述工作,大部分时间。但是,我有写锁定的同时进程越多,我在pd.read_pickle(file)舞台上得到的 EOFError 错误就越多。

回溯非常长且令人费解。

无论如何,到目前为止我的想法是,由于它有时可以工作,所以上面的代码一定很好*(尽管它可能很混乱,我不介意听到更好的方法来做同样的事情)。

但是,当我有太多进程尝试写锁定时,我怀疑文件没有时间保存或其他东西,或者至少以某种方式下一个进程还没有看到前一个进程保存的内容。

有办法解决吗?我尝试在time.sleep(0.5)我的代码周围添加语句(在 之前read_pickle,在 之后to_pickle),但我认为它没有帮助。有谁知道会发生什么或知道更好的方法来做到这一点?

另请注意,我认为写锁定不会超时。我尝试对这个过程进行计时,并且我还在其中添加了一个标志来标记写锁定是否超时。虽然有 300 个进程并且它们可能正在尝试写入并改变速率,但总的来说,我估计每秒大约有 2.5 次写入,这似乎不会使系统过载,不是吗?*

*pickled DataFrame 的大小为几百 KB。

0 投票
1 回答
1361 浏览

python - python多处理读写锁

我有使用 multiprocessing.Lock 的多处理 python 代码。我想将其更改为具有读写锁而不是简单锁。我一直在寻找它的实现,但我在 python 中发现的唯一多个读取器/单个写入器锁是基于线程而不是多处理接口。

我的问题是有谁知道是否有办法在 python 多处理中使用读写锁?