问题标签 [readerwriterlock]

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

c++ - 为什么 boost shared_mutex unlock_shared 需要在最后一个阅读器中将 state.upgrade 设置为 false?

我试图理解 boost shared_mutex 的源代码,但被困在unlock_shared()方法中。

以下来自boost1.68的代码副本,第 241 ~ 264 行:

当最后一个 reader unlock_shared 时,如果有升级锁正在升级,它会设置state.upgradetofalsestate.exclusivetotrue然后 notify upgrade_cond

我知道设置state.exclusivetrue可以避免其他线程到locklock_upgradelock_shared

但是为什么设置state.upgradefalse? 如果去掉这条线,会发生什么?

0 投票
2 回答
476 浏览

c++ - C++ 中的 Fair Reader-Writer Ticket Spinlock 运行缓慢

我最近在 C++ 中实现了一个公平的读写器票据自旋锁。代码相当简单,我认为它工作得很好。我已经将自旋锁集成到一个更大的应用程序中,并且我注意到在极少数情况下,代码运行非常缓慢,而大多数时候,它运行得非常快。我知道这是由于自旋锁,因为如果我立即用简单的读写器自旋锁替换它(不公平且没有票),代码突然运行得更快。它在不同的机器上发生了几次。我知道如果你用比内核更多的线程来运行这些锁,它们会运行得很慢,但我在一台有 48 个内核的机器上用 16 个线程运行它。我无法在具有 4 个线程和 4 个内核的笔记本电脑上重现该问题。这是代码:

任何建议将不胜感激!谢谢!

0 投票
1 回答
44 浏览

.net-core - 尝试读取资源时 ReaderWriterLock 阻塞

我正在尝试将 aReaderWriterLock用于两个之间的共享资源Tasks。由于某种原因,它开始无限期地等待:

当一项任务尝试访问get该属性LastIssuedAt时,它只会阻塞,我不明白为什么。

0 投票
1 回答
67 浏览

java - Servlet 请求的 Java 并发问题

解决以下问题的正确方法是什么?

编写一个逻辑,其中 100 个读取器(Servlet 请求)或一个写入器(Servlet 请求)可以同时访问映射(缓存)中一个键的关键部分。如果在这种情况下写入器进入画面,所有读取器都应该停止进度,并且一旦写入器完成关键部分处理(重新填充同一键的缓存元素),就应该重新启动。

我实现了一个类似这个问题的解决方案,其中一个 Resource 类的实例将与单个键相关联。

以前我使用信号量实现了简单的逻辑,其中我将一个信号量实例与单个键相关联并使用了 100 个许可,如果在这种情况下写入线程进入图片,我消耗了所有剩余的许可(drainPermits)并让所有许可免费所有读取器和写入器线程都在等待队列中。但它导致作家挨饿。

我认为使用 ConcurrentHashMap 可以解决的其他事情?由于 ConcurrentHashMap 在内部具有基于键的锁定(段)。

0 投票
1 回答
55 浏览

c - 何时唤醒读写器问题中的作者?在释放互斥锁之前还是之后?

我想知道在我的情况下最好的做法是什么。在下面的代码中,我在解锁互斥锁之前向作者发出信号

我想知道这是否出于某种原因更好,以防止死锁

我的完整程序是:

我的实现基于找到的伪代码(此处)[ C 中的读取器/写入器实现

0 投票
1 回答
356 浏览

ios - 我写的由 GCD 代码支持的读写器锁导致并行测试死锁

我在 GCD 中实现了这个读写器锁,但在并行测试中失败了。我可以解释为什么它失败了吗?

这是用于 iOS 开发的。该代码基于Objective C。我在GCD中编写了一个带有读/写锁的RWCache,用于数据保护。

如果没有死锁,程序会退出0,否则程序会挂起不退出。

0 投票
1 回答
645 浏览

rust - Arc 是否允许 RwLock 拥有多个作者?

我正在玩这个玩具结构:

我的理论是在 of 周围有一个,Arc然后我可以有多个写入器,这些写入器可以独立/同时修改via的和字段。RwLockCommunityRwLockfriendsindexCommunityContentsRc<RefCell

这甚至可能吗?RwLock无论如何,一次只允许一个以上的作家 - 在这种情况下,我应该删除并RefCells简化整个结构?

0 投票
1 回答
18 浏览

synchronization - 如果在读写器问题中修改读取器进程会发生什么?

这是阅读器进程的代码(可行的代码)

这是作家的过程;

如果替换(在读者中)会有什么结果

从:

至 :

谢谢!

0 投票
1 回答
87 浏览

c# - 关于 ReaderWriterLockSlim 的问题。我使用 readerwriterlockslim 进行读写,但最后只在控制台中显示 write。为什么?

这是代码:

我想测试ReaderWriterLockSlim,我期望的结果是在控制台中交替读取和写入,但最后只能在控制台中写入。

结果如下:

但是当使用 ReaderWriterLock 时,它的替代显示。结果如下:

为什么会出现这种情况,有人告诉我这种现象的原因吗?希望回答