问题标签 [rwlock]

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 投票
0 回答
124 浏览

linux - 什么时候使用作家首选的读写器锁?

我知道有很多读者首选的rwlock,还有更激进的设计,例如RCU,通常被认为是读者首选的。

但是,如果作者并不比读者少多少呢?我知道仅写入器的 rwlock 将退回到排他锁,但请考虑以下模式

  • 作家最多,但也有一些读者,也许 80% W 对 20% R?
  • 作家和读者是偶数,50% W vs 50% R
  • 读者最多,但作者不能忽视,他们对延迟有要求,20% W vs 80% R

我有两个问题

  1. 这种情况真的存在吗,尤其是前两种情况?我不知道任何适合这些类型的用户级应用程序。用户级示例是首选。
  2. 如果确实有适合类型 1/2/3 的应用程序,是否有任何现有的方法可以提高锁定性能?
0 投票
1 回答
709 浏览

rust - Rust 中带有 RwLockGuard 的 HashMap 记录光标

我是 Rust 新手,我正在尝试实现一个简单的、线程安全的内存键值存储,HashMapRwLock. 我的代码如下所示:

到目前为止,这段代码工作正常。问题是我正在尝试实现一个scan()函数,该函数返回一个Cursor可用于迭代所有记录的对象。我希望Cursor对象保持 a RwLockGuard,直到释放光标本身才释放(基本上我不想在光标处于活动状态时允许修改)。

我试过这个:

但这不起作用,因为我收到了这个编译错误:

有任何想法吗?

0 投票
0 回答
73 浏览

linux - rwlock 的开销能否高于 mutex 的开销?

我将 a 实现sorted linked list为两个版本。第一个mutex对整个列表使用 single,第二个rwlock对整个列表使用 single。

我运行了一半的操作,Member另一半进行Insert(0.25)操作Delete(0.25)。我根据多个线程绘制了时间,在这种情况下,时间并不像预期的那样rwlock高于mutex.

这怎么可能发生?当有超过 90% 的会员运营时,就rwlocks如预期的那样好。

0 投票
1 回答
381 浏览

c - 为什么 rwlock 在 linux 内核中比 seqlock 更受欢迎?

读了 Robert Love 的 LKD 之后,我学习了 rwlock 和 seqlock,它们都是基于 spinlock 的。

在区分读写器时,rwlock 比 spinlock 更好,它会获得更好的性能。然而, rwlock 会让作家饿了。

seqlock 解决了 rwlock 使 writer 饿死的问题,但是 seqlock 的使用比 rwlock 少。那么,为什么 rwlock 比 seqlock 更受欢迎呢?

0 投票
0 回答
62 浏览

c# - 如何使用 RWLock 实现多读一写的场景?

我正在尝试编写一种处理某些消息的方法。它们可以被读取或写入消息。允许并行读取,但是当write获得锁时,所有后续的读锁都应该等到写锁被释放。所以我认为ReaderWriterLockSlim这是我需要的。但是当我尝试实现简单的应用程序以查看它是否按预期工作时,我得到了Recursive read lock acquisitions not allowed in this mode异常。

这是我的示例来展示它的工作原理:

预期结果: 100 行Readonly task start, 1 行Write task start, 然后 100 行Readonly task done, 然后 1 行Write task done, 然后程序的其余部分打印。

实际结果:

我不明白递归出现在哪里。我只是调用一个函数,没有任何递归。我阅读了文章,但我看不到它在这里是如何工作的。

0 投票
1 回答
616 浏览

linux-kernel - Linux内核:读写锁rwlock(死锁)的不理解行为

尝试使用(linux 内核)rwlock API,我得到了一个我无法理解为什么会发生的行为(死锁)。有人有什么解释吗?(请注意,代码仅用于实验,没有背后的逻辑:示例我知道在持有自旋锁时睡觉是个坏主意,但这对我测试的代码没有影响)。

代码如下,运行会导致死锁。

我正在获取日志:

我试图将运行时模式化:

无法理解的行为: 我想知道为什么 (w) 线程一直在 10s 旋转情况与即时 3s 相同:r2 正在旋转,因为 w 试图获取写锁(w 正在旋转,因为 r1 持有锁),但是当r1 完成,w 应该被解锁并开始运行。这发生在 3 秒而不是 10 秒。

0 投票
0 回答
61 浏览

rust - 如何修改读锁内的内容?

我有一个包含两个字段的结构:读者数量和作者数量。当我使用写锁时,我会修改 writers 的值,并打印它们。当我使用读锁时,我想修改阅读器的数量,然后打印两个值。我可以做这样的事情吗?还是有其他方法可以做到这一点,例如某种带有互斥锁的计数器?

0 投票
0 回答
270 浏览

multithreading - Rust:发送一个parking_lot::RwLockReadGuard

这是我正在尝试编写的简化代码:

但是,RwLockReadGuardis notSend,因此此代码无法编译。

我应该如何解决RwLockReadGuard跨线程边界发送的问题?

0 投票
0 回答
381 浏览

c++ - 多个阅读器时的 RWLock 与互斥锁

我正在实现一个 C++ 多线程应用程序,在某些变量上我的读者多于编写者(至少 30:1 的比例),我想使用 RWLocks(maybe pthread_rwlock) 而不是 Mutexes( std::mutex),因为它们似乎非常适合许多读者.

我读到的内容:
https ://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock
https://www.arangodb.com/2015/02/comparing-atomic-mutex-rwlocks/
https://docs .oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/locks/ReadWriteLock.html(java但我认为原理是一样的)

但似乎 RWLock 的自定义实现在内部至少包含一个互斥锁,那么为什么要使用 RWLock 呢?

0 投票
2 回答
250 浏览

multithreading - 线程中的 RwLock::spawn 不会释放锁

我不确定它为什么会挂起my.rw.write();

如果您取消注释sleep呼叫,它工作正常。这意味着在 spawn 线程执行并释放RwLock. 我觉得理论上应该没问题。我哪里错了?