readerwriterlock

    1热度

    2回答

    我试着解决以下问题,我知道有多种解决方案,但我正在寻找最优雅的方式(少代码)来解决它。 我有4个线程,其中3个尝试在无限循环中向易失性整数变量写入唯一值(0,1或2),第4个线程尝试读取此变量的值并打印stdout的值也在无限循环中。 我想在线程之间进行同步,以便写入0的线程将被运行,然后是“打印”线程,然后是写入1,然后再次打印线程的线程,如此等等... 因此,最后我期望看到在“打印”线程的输出

    -3热度

    1回答

    我想实现我使用互斥锁C中的第一读者的作家的问题(读者的偏好),并解锁,以确保没有作家可以访问该线程,如果读者有一个锁,任何读者都可以访问该线程,如果第一个阅读器有一个锁。这是我的代码。我无法得到我的代码直到结束,即它没有到达线程连接部分。我想我在某处遇到了一个死锁,或者我正在将我的互斥锁放在错误的地方并解锁。 #include <stdio.h> #include <stdlib.h> #in

    0热度

    2回答

    我试图在C中实现读者和作者问题的变体,变体是作者可以是增量或减量,他们应该保持运行计数。下面是我试图实现的代码,我得到错误“Segmentation Fault(核心转储)。我试图调试,并收到来自gdb - #0 0x0000000000400d84在main()中的反馈。 我会感激如果有人能解释这个给我/给我如何解决这个故障提示 感谢 #include <stdio.h> #include <

    1热度

    1回答

    我保持ReaderWriterLockSlim对象的字典资源访问:(示例代码是丑陋这里,只是让你明白我的目的) static ConcurrentDictionary<string, ReaderWriterLockSlim> rwResourceLocks = new ConcurrentDictionary<string, ReaderWriterLockSlim>()

    3热度

    5回答

    public class IntermediateMessage { private final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock(); private final Lock read = readWriteLock.readLock(); private final

    -2热度

    1回答

    以上是读者写入问题的解决方案,写者比读者有偏好。 假设最初1000个阅读器开始执行代码来读取数据(假设读取的数据代码很大,每个线程需要1秒),那么1个写入器会尝试写入数据。所以作者必须等待1000位读者先完成(即1000秒)。 例如,在一个作家更新时间和许多读者阅读时间的应用程序中,作者必须等待1000秒,这是很大的。 是否有解决方案,当作家试图写作时,所有读者都将被抢先,直到作者完成其任务?

    0热度

    1回答

    有一个众所周知的算法,使用纯WinAPIs/C++在Windows平台上采用单个进程的线程之间读取器/写入器锁定同步: Here's an example 对我来说,我需要几道工序之间做到这一点,即作者是在一个过程中,读者都在其它进程。任何想法如何做到这一点? PS。我需要这个已经开发的项目,所以我不能使用除C++/MFC或纯WinAPI以外的其他任何东西。换句话说,我不能使用Boost或类似的扩

    3热度

    1回答

    我很难理解为什么第一个读者 - 作者问题会使写入过程陷于挨饿,即:代码如何为读者过程提供优先权?当其中一个阅读器进程执行signal(wrt)时,作者进程是否无法获得锁定?信息量列表是否是结构化的(正如我可以看到作者将如何在LIFO列表中以稳定的阅读器流程饥饿),从而优先考虑读者进程,还是我误解了一些基本的东西? semaphore wrt=1,mutex=1; readcount=0; wr

    0热度

    1回答

    我发现既没有boost也没有tbb库的条件变量具有与读写器锁定(即boost中的共享互斥锁)工作接口。 condition_variable :: wait()只接受互斥锁。但是我认为让它在读写器锁定下工作是相当合理的。谁能告诉我为什么他们不支持这个原因,或者为什么人们不这样做? 感谢, 崔

    0热度

    1回答

    我想使用volatile值实现一个简单的多读/单写锁。 虽然_InterlockedXXX提供了完整的栅栏障碍,如果我是正确的,也是“易失性”关键字,我想知道可能的缺陷和改进。我没有获取/释放语义的经验。 我的代码: BOOL TryAcquireShared(LONG volatile *lpnValue) { LONG initVal; do { i