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

c++ - pthread 读写锁定无限期行为

我在测试 pthread 读写锁时遇到了意外的结果。

以下是我的代码。

经过几次运行,我偶尔会发现有一些意想不到的事情。这是一个例子:

0 1 2 3 0

它是读取器线程的输出。基本上,它说数字的大小现在是 5。在这种情况下,我希望结果应该是 0 1 2 3 4。

顺便说一句,我试图实现加法互斥锁,这会引发意想不到的行为。

我对解决方案和根本原因都很感兴趣。谁能帮帮我?

提前感谢任何帮助。

0 投票
1 回答
2591 浏览

c++ - 升级读锁写锁而不释放C++ 11中的第一个锁?

我知道可以boost::UpgradeLockable在 C++14 中使用。
C ++ 11有类似的东西吗?

0 投票
1 回答
246 浏览

java - Java Concurrency ReadWriteLock with my own timestamp

ReentrantReadWriteLock is perfect for read-write scenario based on timestamp programmatically at the time of reception.

Java ReentrantReadWriteLock will automatically sync all of them in order based on timestamp offered by Java itself. However, how I need to use external timestamp which is offered along with each request.

How to design ReadWriteLock ordered by external timestamp?

0 投票
1 回答
1422 浏览

java - 读写锁。了解从 readLock 升级到 writeLock

考虑这个JDK标准接口:

B. Goetz in Java Concurrency 在实践中提到从 readLock 升级到 writeLock 容易死锁。

如果两个读取器同时尝试升级到写锁,则两者都不会重新获得读锁。

让我感到困惑的是,有两个读者试图升级。但即使是一个读者就足够了,不是吗?如果读者尝试升级它还没有释放读锁。试图在持有读锁的情况下获取写锁是死锁的。

因此,据此判断,我认为提供升级操作在理论上甚至是荒谬的。或者也许一个实现可以解决这个问题?

0 投票
1 回答
359 浏览

c++ - 如何使 boost upgrade_to_unique_lock + condition_variable 一起工作?

我使用 std::list 来保存一些字符串,一个线程写入列表,其他一些线程从中读取(获取第一个并从列表中删除)。这是代码:

行有编译错误cond.wait(uniquelock, ...

使用带有条件变量的读/写锁的正确方法是什么?

0 投票
1 回答
1423 浏览

java - Java:ReadWriteLock 和 ReentrantReadWriteLock 之间的区别

我有一些数据结构,我想在其中专门锁定写入访问,但启用并行读取访问。

我进行了一些搜索并找到了类ReadWriteLockReentrantReadWriteLock- 它们都提供了一个读锁和一个写锁。

我不明白它们之间有什么区别。有人可以解释一下吗?

0 投票
1 回答
124 浏览

java - ReadWriteLocks-(Non-reentrant) 如何支持多个读者获取读锁

我在许多教程中都遇到了 ReadWriteLock 的不可重入实现。

问题:

lock此类的一个对象(例如)在所有读取器和写入器线程之间共享以进行同步。

让我们假设 Reader T1 调用lock.lockRead(),这获得了锁对象上的锁,而 Reader T2 同时调用lockRead()了同一个对象。但是 T1 已经锁定了对象,所以 T2 应该被阻塞并在队列中等待。

那么,代码是如何让多个阅读器同时设置readLock的呢?

请纠正我知道我什么时候弄错了。

0 投票
2 回答
1097 浏览

multithreading - 我曾经*不想*想使用读/写锁而不是普通互斥锁吗?

在同步对共享资源的访问时,除了它具有比我可能需要的更多功能的哲学原因之外,是否有理由使用读/写锁而不是普通互斥锁(基本上只是一个写锁) ?

换句话说,如果我只是默认将读/写锁作为我首选的同步结构,我是不是在自找麻烦?

在我看来,总是选择读/写锁并相应地使用读与写锁的一个很好的理由是,我可以实现一些同步,然后不必再考虑它,同时获得更好的性能可能带来的好处如果有一天我把代码放到一个竞争更激烈的环境中,未来的可扩展性。因此,假设它具有潜在的好处而没有实际成本,那么一直使用它是有意义的。那有意义吗?

这是在一个没有真正资源限制的系统上,它可能更多的是一个性能问题。此外,我通常已经提出了这个问题,但如果重要的话,我会特别考虑 QtQReadWriteLockQMutex(C++)。

0 投票
1 回答
85 浏览

java - Java ReadWriteLock 重入

嗨,我已经阅读了 Java 中的 ReadWriteLock,但我不确定我是否掌握了它的重入部分。这是两个简短的代码示例,仅使用一个主线程来显示重入

第二个例子

在第一个中执行了 sysout,但在第二个中没有执行,这是为什么呢?两个锁都将由同一个线程获得,所以我们在这里有一个可重入的情况,但是只有在首先获得 writelock 时才能实现入口,这很奇怪,因为在不可重入的情况下,文档说写操作对所有线程都是独占的其他操作(无论是写还是读)。

0 投票
0 回答
34 浏览

sql - 数据库中是否有 read 或 write_lock 结构?

假设我想编写(更新)存在于我的数据库的许多表中的东西,例如 EMPID,并且我想将所有 EMPID 从 4 个数字更改为 5 个。

你会怎么写这个?它是一个正常的更新查询,write_lock开头是 a ,最后是解锁?