问题标签 [synchronization]

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 投票
7 回答
2701 浏览

java - Java中实例方法同步的等价代码

在讨论 Java 同步问题时,有人评论说以下代码片段不等效(并且可能编译为不同的字节码):

它们是等价的吗?

0 投票
4 回答
85020 浏览

file - 将文件从 Windows 即时镜像/同步到 Linux 服务器的最佳方式

我在 Windows 机器上有一个目录,其中包含大量文件和文件夹,我需要查看这些文件和文件夹,并将文件立即(或尽可能接近)镜像/同步到本地网络上的 Linux 机器。

我调查过: - Rsync,不够实时 - WinSCP '保持目录最新' 功能,这没问题,但仅限于 500 个目录,性能很慢。

有很多共享软件风格的应用程序声称可以做到这一点,但它们看起来都很可疑。似乎某处必须有一个好的 FOSS 解决方案?

更新:只要是即时和自动的,我会对单向传输而不是完全同步感到满意。

0 投票
4 回答
1302 浏览

c# - 读取值时是否应该锁定资源?

在 C# 中进行线程同步时,我是否应该在读取值或只是更改它时锁定一个对象?

例如我有 Queue<T> 对象。我应该在执行 Enqueue 和 Dequeue 时锁定它,还是在检查 Count 等值时也应该锁定它?

0 投票
5 回答
3840 浏览

time - 分布式时间同步和 Web 应用程序

我目前正在尝试构建一个应用程序,该应用程序本质上需要跨服务器和每个客户端进行良好的时间同步。我的应用程序有一些替代设计可以消除这种同步需求,但是当它不存在时,我的应用程序很快就会开始变得糟糕。

万一我遗漏了什么,我的基本问题是:同时在多个位置触发一个事件。据我所知,这样做的唯一方法需要某种时间同步,但我可能错了。我尝试以不同的方式对问题进行建模,但这一切都归结为a)一个糟糕的应用程序,或者b)需要时间同步。

假设我真的真的需要同步时间。

我的应用程序是基于 Google AppEngine 构建的。虽然 AppEngine 不保证其服务器之间的时间同步状态,但通常它非常好,大约几秒钟(即比 NTP 好),但有时它很糟糕,比如说,大约 10 秒的同步。我的应用程序可以处理 2-3 秒的不同步,但就用户体验而言,10 秒是不可能的。所以基本上,我选择的服务器平台并没有提供非常可靠的时间概念。

我的应用程序的客户端部分是用 JavaScript 编写的。同样,我们遇到客户也没有可靠的时间概念的情况。我没有进行任何测量,但我完全希望我的一些最终用户拥有设置为 1901、1970、2024 等的计算机时钟。所以基本上,我的客户端平台不提供可靠的时间概念。

这个问题开始让我有点抓狂。到目前为止,我能想到的最好的事情就是在 HTTP 之上实现类似 NTP 的东西(这并不像听起来那么疯狂)。这将通过在 Internet 的不同部分调试 2 或 3 台服务器来实现,并使用传统方式(PTP、NTP)来确保它们的同步至少在数百毫秒的数量级上。

然后,我将创建一个 JavaScript 类,该类使用这些 HTTP 时间源(以及可从 XMLHTTPRequest 获得的相关往返信息)实现 NTP 交集算法。

如您所知,此解决方案也很浪费时间。它不仅非常复杂,而且只解决了一半的问题,即让客户对当前时间有一个好的概念。然后我必须在服务器上妥协,要么允许客户端在他们发出请求时根据他们告诉服务器当前时间(大安全性不行,但我可以减轻一些更明显的滥用),或者让服务器向我的一个神奇的 HTTP-over-NTP 服务器发出单个请求,并希望该请求足够快地完成。

这些解决方案都很糟糕,我迷路了。

提醒:我想要一堆网络浏览器,希望多达 100 个或更多,能够同时触发一个事件。

0 投票
23 回答
1403 浏览

version-control - 在家工作时使用什么策略来同步代码

在我的工作中,我目前在 Virtual Machine 中拥有我的开发环境。当我需要在家工作时,我会将我的虚拟机和我需要的任何数据库复制到笔记本电脑驱动器大小的外部 USB 驱动器上。大约 10 分钟的复制后,我将驱动器放在口袋里回家,将 VM 和数据库复制回我的个人计算机上,然后我就可以开始工作了。我按照相同的步骤将工作带回。

因此,如果我计算等待文件完成复制以便我将工作带回家并再次带回来所花费的总时间,大约需要 40 分钟!我确实可以在家中与我的工作建立 VPN 连接(前提是两个站点的 Internet 都已启动)和不错的 Internet 速度(8 mbps 向下/?向上),但我发现远程桌面进入我的工作机器太慢了,以至于我想工作直接在我的虚拟机上。

因此,在查看我有哪些其他选项或如何改进现有选项时,我对您使用或建议在家工作并保持代码/环境同步的策略感兴趣。

编辑:我更喜欢一个选项,在我离开工作之前我不必将我的更改提交到版本控制中 - 因为我喜欢在我的提交中做出有意义的描述性评论,提交将比仅仅将我的 VM 复制到便携式设备上花费更长的时间驾驶!大声笑另外,我更喜欢我的开发环境也保持同步的解决方案。话虽如此,我仍然对您自己的解决方案非常感兴趣,即使它们并没有完全按照我的意愿解决我的问题。:)

0 投票
5 回答
4233 浏览

algorithm - FIFO队列同步

如果只有一个读取器和一个写入器,是否应该同步 FIFO 队列?

0 投票
23 回答
148826 浏览

java - 在 Java 中避免同步(this)?

每当 SO 上出现关于 Java 同步的问题时,有些人非常急切地指出synchronized(this)应该避免这种情况。相反,他们声称,锁定私人参考是首选。

一些给定的原因是:

包括我在内的其他人认为,这synchronized(this)是一个经常使用的习语(也在 Java 库中),它是安全且易于理解的。不应该避免它,因为您有一个错误并且您不知道多线程程序中发生了什么。换句话说:如果它适用,那么就使用它。

我有兴趣看到一些现实世界的例子(没有 foobar 的东西),在这些例子中,避免锁定在也能完成这项工作this时更可取。synchronized(this)

因此:您是否应该始终避免synchronized(this)并用锁定私人参考来代替它?


一些进一步的信息(在给出答案时更新):

  • 我们正在谈论实例同步
  • 隐式(synchronized方法)和显式形式synchronized(this)都被考虑
  • 如果您引用 Bloch 或其他有关该主题的权威,请不要遗漏您不喜欢的部分(例如 Effective Java,关于线程安全的项目:通常是实例本身的锁,但也有例外。)
  • 如果您需要除synchronized(this)提供之外的锁定粒度,synchronized(this)则不适用,因此这不是问题
0 投票
3 回答
3355 浏览

windows - PostMessage 偶尔会丢失一条消息

我编写了一个多线程 Windows 应用程序,其中线程:
A – 是一个处理用户交互并处理来自 B 的数据的 Windows 窗体
。B – 偶尔生成数据并将两个 A 传递给它。

线程安全队列用于将数据从线程 B 传递到 A。入队和出队函数使用 Windows 临界区对象进行保护。

如果调用 enqueue 函数时队列为空,该函数将使用 PostMessage 告诉 A 队列中有数据。该函数检查以确保对 PostMessage 的调用成功执行,如果不成功则重复调用 PostMessage(PostMessage 尚未失败)。

这在相当长的一段时间内运行良好,直到一台特定的计算机开始丢失偶尔的消息。丢失的意思是, PostMessage 在 B 中成功返回,但 A 从未收到消息。这会导致软件出现冻结。

我已经想出了几个可接受的解决方法。我很想知道为什么 Windows 会丢失这些消息,以及为什么这只发生在一台计算机上。

这是代码的相关部分。

0 投票
4 回答
4859 浏览

multithreading - 锁定 HttpRuntime.Cache 以进行延迟加载

我们有一个运行 .NET 2.0 的网站,并已开始使用 ASP.Net HttpRuntime.Cache 来存储频繁数据查找的结果,以减少我们的数据库访问。

片段:

每当我们想查看缓存时,我们都会悲观地锁定。但是,我已经看到网络上发布的各种博客建议您在检查缓存值后锁定,以免产生锁定的开销。这似乎不对,因为检查后另一个线程可能已写入缓存。

所以最后我的问题是这样做的“正确”方法是什么?我们甚至使用了正确的线程同步对象吗?我知道 ReaderWriterLockSlim() 但我们正在运行 .NET 2.0。

0 投票
2 回答
1864 浏览

java - Prevayler 的同步策略是什么?

Prevayler 保证所有写入(通过其事务)都是同步的。但是阅读呢?

如果不使用显式同步(在用户代码中),脏读是可能的吗?

如果业务对象被解读为:

?

如果是这样,哪些同步策略对用户代码有好处?

(考虑一个业务对象 A 包含业务对象 Bs 的集合),

  • 使用同步集合(A 内的 B),例如来自 java.util.concurrent 包?
  • 同步集合读取外部事务与集合写入事务内部,例如在读写周围使用“同步(集合)”代码?