繁体   English   中英

一个线程在不被读取的同时写入数据,许多线程在不被写入的同时读取数据

[英]One thread writes data while not being read, many threads read while data is not being written

我不仅对锁和同步块有基本的了解。 但是,据我所知,它们只是确保单个线程一次可以访问某些数据。

我需要的有点不同。 可以说我有一个字符串。 我只有一个线程对其进行了更改(为其分配了一些值),并假定此操作花费大量时间-3秒。

许多其他线程需要读取此String的值,并假设值在整个块执行之前一直保持不变,然后执行一些操作(执行代码块)。 假设该块执行需要5秒钟。

因此,当存在使用/读取字符串的线程时,“写入器”线程不得更新该字符串,并且“读取器”线程必须等待(由“写入器”执行的)更新完成,然后才能开始使用它。

如果只有1个“ writer”和1个“ reader”,我可以用锁解决这个问题,但是现在只有1个“ writer”和N个“ readers”,我该怎么办? 请注意,许多“读取器”可能会同时访问数据。

顺便说一下,由于它有数百行,包括互联网访问,数据库访问...,因此很难提供代码。

我知道我可以通过更改实现来避免此问题,但是我有理由偏爱此实现-而且我也不懒于更改它。

您正在寻找的是ReadWriteLock 多个线程可以同时读取的位置。 写入被阻止,直到读取线程结束。 并阻止读取 ,直到写入线程完成为止。

如果操作花费这么长时间,则说明您做错了什么。 正确的方法是在不影响旧数据的情况下计算新数据(无论花费多长时间),然后一次性将新数据替换为新数据。 并且只有在每个人都使用完旧数据后才销毁旧数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM