问题标签 [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 投票
2 回答
609 浏览

java - Java ReentrantReadWriteLock 请求

只是一个关于 Java 中的 ReadWriteLocks(特别是 ReentrantReadWriteLock 实现)的快速问题,因为我没有找到清楚的 sun 文档。

如果一个线程在另一个线程请求写锁时持有读锁会发生什么?写锁线程是否必须等待所有当前持有的读锁被释放?此外,在授予和释放写锁之前,是否所有新的读锁请求都会被阻止?

谢谢

0 投票
3 回答
780 浏览

iphone - 我可以在 iPhone 上写入 SQLite 数据库时读取它吗?

是否可以在写入 SQLite 数据库时读取它?

我知道在写入时访问被阻止写入,但读取是否相同?

0 投票
5 回答
16154 浏览

java - ReentrantReadWriteLock 上的读锁是否足以并发读取 RandomAccessFile

我正在写一些东西来处理对数据库文件的并发读/写请求。

ReentrantReadWriteLock看起来很匹配。如果所有线程都访问共享的RandomAccessFile对象,我是否需要担心并发读取器的文件指针?考虑这个例子:

在 getRecord() 方法中,是否可以使用多个并发读取器进行以下交错?

线程 1 -> getRecord(0)
线程 2 -> getRecord(1)
线程 1 -> 获取共享锁
线程 2 -> 获取共享锁
线程 1 -> 寻求记录 0
线程 2 -> 寻求记录 1
线程 1 ->在文件指针处读取记录 (1)
线程 2 -> 在文件指针处读取记录 (1)

如果使用 ReentrantReadWriteLock 和 RandomAccessFile 确实存在潜在的并发问题,那么替代方案是什么?

0 投票
2 回答
233 浏览

perl - 以读/写方式打开的收缩文件

在 perl 中:

我有一个以读/写方式打开的文件,带有排他锁。

open( $f, "+< $filename" );
flock( $f, LOCK_EX );

如果我向文件写入的数据多于以前保存的数据,则文件将会增长。
如果我写的数据少,我的新内容在开头,但旧内容仍然在文件末尾。

这并不奇怪,但这不是我想要的。

有没有一种简单的方法可以在以读/写方式打开文件时缩小文件?基本上我想告诉它在这个字节位置结束文件。

我知道我可以以不同的方式打开它,我正在考虑这样做,但是单行修复会很好。

0 投票
3 回答
2066 浏览

java - 混合 volatile 和 synchronized 作为读写锁

考虑一个具有大量线程读取和少量线程写入的原始类型变量,以下代码会正常工作吗?

如果可以,它是否提供比 1) 更好的性能。在所有方法上声明同步;2)。使用显式读写锁?

这是一种常见的模式吗?如果不是,在这种情况下通常使用什么模式?

这目前对我来说很好,但我觉得同时使用 volatile 和 synchronized 有点多余。

0 投票
6 回答
2018 浏览

java - 原始类型的 getter/setter 是否应该在多线程应用程序中使用 ReadWriteLock 锁定?

我有一个用于多线程应用程序的 Java 类。并发访问的可能性很大。多个并发读取操作不应阻塞,因此我使用的是 ReadWrite 锁。

为简单起见,我try...finally在此示例中省略了锁周围的块。

我想知道是否有必要(或者说推荐)锁定/同步原始类型的 getter 和 setter?我知道 Java 中的分配和返回操作是原子的。但是,通过使用这些锁,我不能确保每个访问者都获得最新的值(等于 using volatile)吗?

如果原语是doubleorlong怎么办?

0 投票
3 回答
1277 浏览

objective-c - 如何确定线程是否有锁?

我正在编写一个我想要线程安全的 Objective-C 类。为此,我使用 pthreads 和 a pthread_rwlock(使用@synchronized是矫枉过正,我想了解更多关于 pthreads 的知识)。锁在对象指定的init方法中初始化并在 中销毁dealloc。我有三种操作锁的方法;readLock, writeLock, unlock. 这三个方法只是调用相关的 pthread 函数,目前没有别的。

下面是两个对象方法,它们都需要 writeLock:

调用setAddValue:将首先获得一个写锁,然后调用setValue:atIndex:它也将尝试获得一个写锁。文档指出,发生这种情况时行为未定义。因此,如何在尝试获取锁之前检查线程是否有锁?

(我可以确保关键部分不进行触发另一个锁定请求的调用,但这意味着代码重复,我想保持我的代码 DRY)。

0 投票
2 回答
1589 浏览

objective-c - 在目标 c 或 c 中需要读写锁

我似乎找不到任何目标 C 的读写锁。这是给 iphone 开发的。有任何想法吗?本文的附录有一些代码,但不完整。

0 投票
2 回答
1721 浏览

java - 在 Java 中使用什么策略进行分层可重入读/写锁定?

我正在寻找一种高效的系统,该系统具有一系列分层组织的读/写锁,以管理对分层组织资源的访问。如果一个子树被锁写,那么在整个子树被释放之前,应该无法获得其他锁;类似地,子树中的写锁应该防止锁定父树。

以下是我正在考虑的想法:

  • 使用Apache Commons 事务。不幸的是,该项目自 2008 年 3 月以来一直没有更新,并已被非正式终止。一些 API 文档似乎表明即将发布的版本(1.3 或 2.0)将包含某种分层锁定,但源代码无处可寻,似乎我们无法再访问他们的 SVN 存储库。

  • 使用一系列ReentrantReadWriteLocks,我将对其进行分层组织。我不是并发专家,我有点害怕自己做。初步的想法似乎表明,即使在我可以尝试锁定子树之前,我也必须在管理ReentrantReadWriteLocks 本身的整个结构上使用外部锁——所以即使要释放锁,我也必须使用外部锁…</p>

  • 使用类 fromjava.util.concurrentjava.util.concurrent.atomic以比使用一系列ReentrantReadWriteLocks 更有效的方式实现我的分层锁。

我已经准备好走最后一条路了,但我很惊讶没有找到任何可以更好地解决这个问题的现有库。所以:

  • 我错过了一些明显的解决方案吗?
  • 还是这个问题特别难以正确解决?
0 投票
1 回答
837 浏览

android - Android 内容提供者锁

我应该在 contentprovider 的功能上使用 ReadWriteLock 吗?

在 contentprovider 的查询中,我执行 getReadableDatabase,然后检查它是否打开并执行查询。但有时它会在 DatabaseIsClosed 异常上崩溃。这可能是另一个进程执行了一个插入,该插入执行了一个关闭第一个的 getWritebleDatabase。

我正在使用不断查询和插入内容提供者的应用程序和服务。所以看起来 contentprovider 不是线程安全的。

是否有助于使功能同步?

谢谢!