问题标签 [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.
java - 如何使用java同步文件操作?同步还是锁定?
我使用 JSCH 库创建了一个用于读取和写入远程位置属性文件的应用程序。
我想同步写操作。
这是我的代码,
这就是我要的
如果用户尝试写入 Web 应用程序上的属性文件说“A”,则尝试写入同一个 Web 应用程序的同一文件的所有其他用户应该等待,但另一个用户可以写入同一个 Web 应用程序或文件的另一个文件在另一个 webapp 上具有相同的名称。
同步方法可以完成所有这些工作吗?它如何识别 webapp 和属性文件?
我们需要同步读写操作吗?
如何在这种情况下实现锁定?
注意:我看到了关于并发的不同问题,但这些问题并没有消除我的疑虑,这就是为什么要问新问题,请帮助我对此进行澄清
java - 写时读锁
我需要帮助来理解以下代码:
如果我们在上面的代码中不使用 Read Locks 会发生什么?喜欢 :
- 当我们只写数据时,我们真的需要读锁吗?
- 上面两个代码有什么区别?
- 我们是否应该使用读取锁来访问对象(composedPredicate)进行空检查?
c# - 实现 ac# 读写锁,其中一些读取产生写入
我必须实现一些涉及由不同线程访问的共享资源的.Net 代码。原则上,这应该通过简单的读写锁来解决。但是,我的解决方案要求某些读取访问最终会产生写入操作。我首先检查了ReaderWriterLockSlim,但它本身并不能解决问题,因为它要求我提前知道读操作是否可以变成写操作,而这不是我的情况。我最终选择了简单地使用 ReaderWriterLockSlim,当读取操作“检测到”需要执行写入操作时,释放读取锁并获取写入锁。我不确定是否有更好的解决方案,或者该解决方案是否会导致一些同步问题(我有 Java 经验,但我对 .Net 相当陌生)。
下面的一些示例代码说明了我的解决方案:
java - 我使用 ReentrantReadWriteLock 有什么问题?
我有麻烦ReentrantReadWriteLock
。当我尝试擦除文件时线程挂起。我有一个预定的读取操作和最终的写入操作(当用户按下按钮时),它们使用ReentrantReadWriteLock
. 下一个代码看起来不适合使用,抱歉,为简单起见,我将所有内容放在一个地方。
并像这样编写操作:
当wipeFile()
方法第一次触发时,一切正常。但是从第二次尝试开始,它就挂了lock.writeLock().lock()
;我试图wipeFile()
从另一个线程调用方法,因为有人写道,写锁不应该在具有读锁的一个线程中使用。
但这无济于事,另一个线程也挂起。
那么,问题是我对 ReentrantReadWriteLock 的使用有什么问题?
locking - 实现写优先读/写锁
我有一个互斥库,并且正在尝试实现一个写优先锁。我正在看这个例子:
https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock
我了解读优先锁,但我不了解写优先锁。有人可以解释如何实现吗?
具体来说,我不明白这部分:
我也不明白这个标志w
是通用的,还是每个进程只是一个不同的标志。我猜是前者。
例如,这里我们看到了获取读锁的算法:
但这是什么wait c, m
意思?这不能意味着等待同时锁定c
和m
,因为我们已经m
在步骤 1 中锁定了。
而且,对于Set w to true
- 这是否意味着w
必须在所有流程或仅此流程中设置为 true?
java - 正确使用读写锁
我有一个要求如下:
1) 具有所有静态方法和静态列表的类。这个列表存储了一些我对其执行一些操作的对象。
2) 现在这个操作是从多个线程调用的。
3) 此操作调用不共享任何公共数据,因此此方法不同步。
4) 现在,每当这个列表用新对象更新时,我必须停止这个操作调用。
可能的解决方案 :
1) 使 performOperation() 和 updateList() 同步。但是 performOperation() 被调用的频率太高,而更新列表频率太低。
2)使用读写锁。在 performOperation() 中使用读锁,在 updateList() 中使用写锁。示例如下所示:
那么哪种解决方案更好呢?这是读写锁的正确用法吗?为什么我对方法 2 感到困惑是 performOperation() 中没有需要读访问或写访问的数据。我只是在更新列表时无法调用此方法。所以我不确定它是否适合使用读写锁。
c - 安全删除并发链表中的节点
我目前正在阅读 APUE 这本书。当我阅读关于 pthread reader/writer-lock 的章节时,我有一个关于它使用 reader/writer-lock 实现并发队列的问题。
我的问题是这个实现如何确保 astruct job
只从链表中删除一次。据我了解,可以安排两个线程,使它们就在 line 之前pthread_rwlock_wrlock
。然后struct job *jp
可能会被释放两次。如果struct job *
是动态分配的数据结构,这可能会导致双重释放错误。有什么建议吗?
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。
python - python多处理读写锁
我有使用 multiprocessing.Lock 的多处理 python 代码。我想将其更改为具有读写锁而不是简单锁。我一直在寻找它的实现,但我在 python 中发现的唯一多个读取器/单个写入器锁是基于线程而不是多处理接口。
我的问题是有谁知道是否有办法在 python 多处理中使用读写锁?