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

java - 如何在不丢失数据的情况下替换并发实例?

我有很多线程保存状态,一个线程记录状态。

我不想丢失数据,这意味着始终记录最新状态。

我的解决方案是在替换/清除统计数据集合时使用读写锁,这样不会丢失数据但看起来很麻烦。请参阅下面的代码。

我想要的是在不更改实例的情况下以原子方式运行一些代码的某种方式。不用说,实例更改也应该是原子的。

繁琐的解决方案(不,,,private故意)finalstatic

0 投票
1 回答
278 浏览

c++ - 简单的读写锁

我发现互联网上的许多读写自旋锁实现都不必要地复杂。我用 C++ 编写了一个简单的读写锁。

谁能告诉我,如果我遗漏了什么?

用法如下。

编辑:

感谢您的回答。我现在将答案更改为原子等价物

0 投票
2 回答
3462 浏览

c++ - C++ 多线程互斥锁分段错误

** 这是针对大学课程的,我实际上并没有尝试破解密码 ** 下面是我的源代码,但基本上我想要发生的是父进程将密码排队到 std::list<> 尝试列表中。然后子线程从队列的前面抓取,目前只打印出该值。

正如您在下面的代码中看到的那样,我尝试在弹出前端时使用 std::mutex 来阻止尝试列表,但是两个线程同时通过锁并从前端读取。然后其中之一出现分段错误,程序崩溃。

段错误的特定代码部分是......

0 投票
1 回答
758 浏览

rust - 如何在 rust 中创建 RwLock 的向量?

我需要制作一个结构向量。向量的每个元素都必须由 RwLock 保护。线程需要在这个向量中读写(感谢 RwLock )。我怎么能在 Rust 中做到这一点。

我试过使用 Arc 的向量。

结果是这样的:

我希望元素 0 设置为 { x : 10, y : 10 }

我认为 Arc 增加了 shared_values { x : 0 , y : 0 } 的计数参考,但不会为向量中的每个索引创建独立元素。

0 投票
1 回答
576 浏览

c++ - Windows 的 AcquireSRWLockExclusive 是递归的吗?

我需要使用读写锁,但我还想确保锁在读写模式下都是递归的,这样在同一个线程上使用它的调用函数就不会锁定。

我在 MSDN 文档上一无所获。也许它隐藏在某个地方而我没有找到它?

0 投票
1 回答
97 浏览

c - 为链表上的操作实现多线程的问题

在下面的代码中,我尝试使用多个线程处理各种链表操作。可以支持多个链表,所有函数都是通用的,除了我保留了一些printf语句来调试代码。

它给出的输出为

显然,79 被insert_mid函数插入到了位置 2,但为什么它会变成 -2087655584?解决办法是什么?

如果需要任何信息,请告知。

0 投票
1 回答
393 浏览

java - 用于多进程读写的 Java 文件锁

在我的应用程序中,多个进程正在尝试访问文件以进行读写。每个应用程序都有一个线程。我需要确保没有 2 个进程同时访问该文件。我在 JDK 中使用 FileLock。这很好用,当一个进程已获得锁定并且其他进程尝试访问文件(用于读取或写入)时抛出异常,说明文件已被其他进程锁定。

现在我需要确保,对于第二个进程,而不是抛出异常线程应该等到第一个进程释放锁,一旦锁被释放,继续它的工作。

我怎样才能做到这一点。所以,胖子我一直没能想出办法做到这一点。

0 投票
1 回答
371 浏览

linux - 进程间共享读写锁

我有两个进程 rwlock1(parent) 和 rwlock2(child) 。我想在进程之间使用读写锁,我需要转移pthread_rwlock_t mem_lock到子进程,我有一个简单的代码,我该如何转移句柄。我不想使用互斥锁。

rwlock1(父)的代码

0 投票
1 回答
231 浏览

winapi - SRW Lock 可以用作二进制信号量吗?

Slim Reader/Writer (SRW) Locks是 Windows 中的一种同步原语,可从 Windows Vista 开始使用。

名称和接口表明它应该用作非定时共享非递归互斥锁。但是,通常也将其用作非共享互斥体,以避免CRTICAL_SECTION开销(仅使用独占 API)。

我注意到它也可以用作二进制信号量。这可以派上用场,因为 Windows API 中可用的其他信号量 - 事件对象和信号量对象 - 始终是内核调用,因此它可能是唯一可从 Windows API 轻松获得的轻量级信号量(并且 C++ 具有从 C++20 开始的信号量,并且boost 线程也不提供信号量)。

但这可靠吗?具体来说,我没有在文档中找到可以以这种方式使用它的明确信息。

但是,我没有发现任何禁止这种用法的东西。文档似乎不确定。

我期望的答案是:

  • 也许有人可以指出允许或禁止使用信号量的文档措辞
  • 也许有这种用法的一些实际经验
  • 也许直接参与 SRW 锁实现的人可以澄清(我认为有一些机会)

示例 - 这不会挂起

0 投票
2 回答
551 浏览

rust - 在惰性静态 RwLock 中返回对 T 的引用>?

我有一个惰性静态结构,我希望能够在程序执行开始时将其设置为某个随机值,然后再获取。这个愚蠢的小片段可以用作示例:

此代码无法编译:

我知道您不能返回对临时值的引用。但我想返回一个ANSWER静态的引用——与临时相反!我想这是RwLockReadGuard第一次调用unwrap返回的问题吗?

我可以通过更改返回类型来编译代码:

但是现在调用代码变得非常不符合人体工程学 - 我必须进行两次额外调用才能获得实际值:

我可以以某种方式ANSWER从该函数返回对静态的引用吗?我RwLockReadGuard<&Answer>可以通过某种方式映射它来返回一个可能吗?