问题标签 [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.
java - Java 8 是否提供锁定优先级?
我有一个 writer 对象和多个 reader 对象。他们读/写单个对象“StateObject”
读者:
作家:
假设目前 10 个读者中有 5 个持有 ReadLock:
现在我的要求是因为作者已经要求 writeLock,其他 3 个读取线程不应该获得 ReadLock,并且在前 5 个线程完成 ReadLock 之后,Writer 应该获得 Lock
是否有任何支持这一点的 Java8 锁定机制?
python - Reader writer lock 优先于 writer
对于这个问题,我有两种类型的计算机:typeA
和B
.
类型电脑一台,A
B型电脑多 台。
B
是可以从 ftp 写入和读取的主机类型。
A
是一台只能从 ftp 读取的计算机。
您可能已经猜到了,ftp 是需要由读写锁解决方案保护的共享区域。
有没有人知道已经存在python package
的处理这种情况的人,如果没有,是否有人有一个例子如何实现这种需要?
我想一些锁应该作为文件在 ftp 上实现,因为我们正在处理来自不同主机的进程。
谢谢
c++ - 如何使用单个解锁方法实现 C++ 读写器锁,可以称为读取器或写入器?
我正在开发一个项目,该项目需要使用特定的操作系统抽象,并且我需要使用它们的信号量和互斥锁来实现读写器锁。我目前有以下格式的设置:
在这个实现中,我需要使用这个 Unlock 方法来解锁写入器并释放所有读取器信号量槽,或者简单地释放读取器信号量槽,但是,我正在苦苦挣扎,因为我想不出一个实现,这将在所有工作案例。如何在给定的设置中完成这项工作?我知道这是可能的,因为 POSIX 能够在他们的实现中实现通用解锁方法,但我找不到任何迹象表明这是如何完成的,因此希望人们可以分享任何信息。
请注意,我不能使用 C++11 或其他操作系统原语。
c++ - 使用 AcquireSRWLock 的安全线程映射/哈希表
我使用 AcquireSRWLockShared 和 AcquireSRWLockExclusive Windows API 围绕非线程安全映射提供了一个瘦包装器。本质上,与查找相关的方法正在使用读锁,而“设置”相关方法正在使用写锁——很简单,直截了当。
这是皱纹:我正在重构旧代码,其中一个要求是调用者需要能够在“集合级别”锁定此映射,然后对其进行不同的调用——所有这些都“在一个事务下”以便说话。
问题是,如果我要获取写锁并保持它,那么如果我要进行查找 - Lookup 方法正在尝试获取将失败或阻塞的读锁。好像我在一个篮子里塞进了 2 种不同的方法,但它只是没有发生。
我能想到的唯一解决方法是我应该使用一个不区分读者和作者的普通临界区——并且同一个线程可以多次进入同一个临界区。那会很糟糕,因为我真的很想获得单个作者/多个读者的性能。有任何想法吗?
multithreading - OpenMP 中的多读、单写锁
有一个由多个线程共享的对象来读取和写入,我需要使用具有以下功能的读写器锁来实现该类:
- 它可能被声明为由一个且不超过一个线程占用。任何其他试图占用它的线程都将被拒绝,并继续做他们的工作而不是被阻塞。
- 任何线程都可以随时询问对象是被自己占用还是被其他人占用,但被声明为占用或释放的时间除外。
- 只有对象的所有者才被允许释放其所有权,尽管其他人也可能会尝试这样做。如果不是所有者,释放操作将被取消。
- 性能需要仔细考虑。
我正在使用 OpenMP 进行这项工作,因此我希望仅使用 OpenMP 中的 API 而不是 POSIX 等来实现锁定。我已阅读此答案,但只有 C++ 标准库的实现解决方案。由于将 OpenMP 与 C++ 标准库或 POSIX 线程模型混合可能会减慢程序的速度,我想知道 OpenMP 有没有好的解决方案?
我试过这样,有时它工作得很好,但有时它崩溃了,有时它被死锁了。我发现也很难调试。
原子变量、互斥锁和互斥锁使用 OpenMP 指令实现,如下所示:
我还使用 OpenMP 提供的锁作为替代:
顺便说一句,我在 x86_64 GNU/Linux 上使用 gcc 4.9.4 和 OpenMP 4.0。
c - C 分段错误 - 读取器和写入器
我正在尝试在 C 中实现读取器和写入器问题的变体,不同之处在于写入器可以是增量器或减量器,并且它们应该保持运行计数。下面是我尝试实现的代码,我收到错误“分段错误(核心转储)。我试图调试并从 gdb 收到此反馈 - #0 0x0000000000400d84 in main ()。如果有人我将不胜感激能够向我解释这个/给我有关如何解决此故障的提示。谢谢!
c# - 读写锁实现
为了练习,我正在尝试为读者-作者问题写一个解决方案。
预期的行为应该是多个读取可以同时运行,但写入需要等待所有读取器完成。
我的解决方案如下Read()
,Write()
方法和我所参考的书Write2()
为作者提供了建议。
1)我不完全理解他们为什么选择以这种方式实现,特别是为什么读锁在 numOfReaders == 0 时被唤醒后试图再次获取。这是为了给读者优先权,如果在 Write 之后立即出现获得了读锁,就在它真正写任何东西之前?
2)我建议的 Write 实现还有其他问题吗?谢谢!!
c - 在 c 中使用 posix 信号量的读写器应用程序中的分段错误
在此代码中,写入器递增数据变量,读取器打印此数据变量。任何时候只有一个写入器可以写入,但是当写入器不写入数据时,所有读取器都可以打印数据。
附加的代码有时会成功运行,但有时会出现分段错误错误。
读写器代码
java - 为什么我的 ReaderWriter 解决方案不起作用?(java,并发)
所以最近我一直在努力解决并发问题。目前我正在尝试为 ReaderWriter 问题寻找解决方案。
我有一个类文件,它计算读者/作家的数量并有两个信号量。
当 Reader 尝试读取时,只要有 Writer Thread 写入,它就必须等待。当它进入时,readCount 在 readerSemaphore 内递增,而在它离开时在同一个 Semaphore 内递减。
当 Writer 尝试进入时,只要有多个阅读器,它就必须等待。当它进入时,它会获取 writerSemaphore 并增加 writerCount。当它离开时,它会释放信号量。
出于某种原因,我无法弄清楚 Writers 没有在 File 类中编辑字符串文件。
提前致谢 :)
multithreading - 为什么互斥量不够?
为什么我们需要semaphore、条件变量s 和其他构造。我得到一个线程被阻塞,直到一个信号比一个接受mutex lock的线程好,检查一个如果没有通过的条件,解锁并重试直到条件通过。
除此之外,还有没有其他好处。例如,我们可以只使用互斥锁来实现读写锁吗?如下所示:
1)上述实现是否可行?如果不是,为什么?
2)我可以说多线程中的所有事情都可以只使用互斥锁来完成吗?