问题标签 [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 ReentrantReadWriteLock 请求
只是一个关于 Java 中的 ReadWriteLocks(特别是 ReentrantReadWriteLock 实现)的快速问题,因为我没有找到清楚的 sun 文档。
如果一个线程在另一个线程请求写锁时持有读锁会发生什么?写锁线程是否必须等待所有当前持有的读锁被释放?此外,在授予和释放写锁之前,是否所有新的读锁请求都会被阻止?
谢谢
iphone - 我可以在 iPhone 上写入 SQLite 数据库时读取它吗?
是否可以在写入 SQLite 数据库时读取它?
我知道在写入时访问被阻止写入,但读取是否相同?
java - ReentrantReadWriteLock 上的读锁是否足以并发读取 RandomAccessFile
我正在写一些东西来处理对数据库文件的并发读/写请求。
ReentrantReadWriteLock看起来很匹配。如果所有线程都访问共享的RandomAccessFile对象,我是否需要担心并发读取器的文件指针?考虑这个例子:
在 getRecord() 方法中,是否可以使用多个并发读取器进行以下交错?
线程 1 -> getRecord(0)
线程 2 -> getRecord(1)
线程 1 -> 获取共享锁
线程 2 -> 获取共享锁
线程 1 -> 寻求记录 0
线程 2 -> 寻求记录 1
线程 1 ->在文件指针处读取记录 (1)
线程 2 -> 在文件指针处读取记录 (1)
如果使用 ReentrantReadWriteLock 和 RandomAccessFile 确实存在潜在的并发问题,那么替代方案是什么?
perl - 以读/写方式打开的收缩文件
在 perl 中:
我有一个以读/写方式打开的文件,带有排他锁。
open( $f, "+< $filename" );
flock( $f, LOCK_EX );
如果我向文件写入的数据多于以前保存的数据,则文件将会增长。
如果我写的数据少,我的新内容在开头,但旧内容仍然在文件末尾。
这并不奇怪,但这不是我想要的。
有没有一种简单的方法可以在以读/写方式打开文件时缩小文件?基本上我想告诉它在这个字节位置结束文件。
我知道我可以以不同的方式打开它,我正在考虑这样做,但是单行修复会很好。
java - 混合 volatile 和 synchronized 作为读写锁
考虑一个具有大量线程读取和少量线程写入的原始类型变量,以下代码会正常工作吗?
如果可以,它是否提供比 1) 更好的性能。在所有方法上声明同步;2)。使用显式读写锁?
这是一种常见的模式吗?如果不是,在这种情况下通常使用什么模式?
这目前对我来说很好,但我觉得同时使用 volatile 和 synchronized 有点多余。
java - 原始类型的 getter/setter 是否应该在多线程应用程序中使用 ReadWriteLock 锁定?
我有一个用于多线程应用程序的 Java 类。并发访问的可能性很大。多个并发读取操作不应阻塞,因此我使用的是 ReadWrite 锁。
为简单起见,我try...finally
在此示例中省略了锁周围的块。
我想知道是否有必要(或者说推荐)锁定/同步原始类型的 getter 和 setter?我知道 Java 中的分配和返回操作是原子的。但是,通过使用这些锁,我不能确保每个访问者都获得最新的值(等于 using volatile
)吗?
如果原语是double
orlong
怎么办?
objective-c - 如何确定线程是否有锁?
我正在编写一个我想要线程安全的 Objective-C 类。为此,我使用 pthreads 和 a pthread_rwlock
(使用@synchronized
是矫枉过正,我想了解更多关于 pthreads 的知识)。锁在对象指定的init
方法中初始化并在 中销毁dealloc
。我有三种操作锁的方法;readLock
, writeLock
, unlock
. 这三个方法只是调用相关的 pthread 函数,目前没有别的。
下面是两个对象方法,它们都需要 writeLock:
调用setAddValue:
将首先获得一个写锁,然后调用setValue:atIndex:
它也将尝试获得一个写锁。文档指出,发生这种情况时行为未定义。因此,如何在尝试获取锁之前检查线程是否有锁?
(我可以确保关键部分不进行触发另一个锁定请求的调用,但这意味着代码重复,我想保持我的代码 DRY)。
objective-c - 在目标 c 或 c 中需要读写锁
我似乎找不到任何目标 C 的读写锁。这是给 iphone 开发的。有任何想法吗?本文的附录有一些代码,但不完整。
java - 在 Java 中使用什么策略进行分层可重入读/写锁定?
我正在寻找一种高效的系统,该系统具有一系列分层组织的读/写锁,以管理对分层组织资源的访问。如果一个子树被锁写,那么在整个子树被释放之前,应该无法获得其他锁;类似地,子树中的写锁应该防止锁定父树。
以下是我正在考虑的想法:
使用Apache Commons 事务。不幸的是,该项目自 2008 年 3 月以来一直没有更新,并已被非正式终止。一些 API 文档似乎表明即将发布的版本(1.3 或 2.0)将包含某种分层锁定,但源代码无处可寻,似乎我们无法再访问他们的 SVN 存储库。
使用一系列
ReentrantReadWriteLock
s,我将对其进行分层组织。我不是并发专家,我有点害怕自己做。初步的想法似乎表明,即使在我可以尝试锁定子树之前,我也必须在管理ReentrantReadWriteLock
s 本身的整个结构上使用外部锁——所以即使要释放锁,我也必须使用外部锁…</p>使用类 from
java.util.concurrent
和java.util.concurrent.atomic
以比使用一系列ReentrantReadWriteLock
s 更有效的方式实现我的分层锁。
我已经准备好走最后一条路了,但我很惊讶没有找到任何可以更好地解决这个问题的现有库。所以:
- 我错过了一些明显的解决方案吗?
- 还是这个问题特别难以正确解决?
android - Android 内容提供者锁
我应该在 contentprovider 的功能上使用 ReadWriteLock 吗?
在 contentprovider 的查询中,我执行 getReadableDatabase,然后检查它是否打开并执行查询。但有时它会在 DatabaseIsClosed 异常上崩溃。这可能是另一个进程执行了一个插入,该插入执行了一个关闭第一个的 getWritebleDatabase。
我正在使用不断查询和插入内容提供者的应用程序和服务。所以看起来 contentprovider 不是线程安全的。
是否有助于使功能同步?
谢谢!