Java中LockSupport.parkNanos的.NET等价物是什么?

4
基本上我需要一种方法来启动亚微秒级别的线程休眠,就像parknanos一样。Thread.Sleep只能精确到毫秒。

2
你能告诉我们你需要等待少于1微秒吗? - sisve
1
@Simon Svensson:也许楼主需要做到像parkNanos这样的方法存在的原因之一?;) - TacticalCoder
2
默认情况下,Thread.Sleep 甚至不能精确到毫秒。16ms 是典型值,除非有人调用 TimeBeginPeriod 来缩短它。这是一个 Windows 的限制,而不是 .net 的限制。如果 Java 能够以如此精度睡眠,我会感到惊讶。另一方面,忙等待可以具有更高的精度。 - CodesInChaos
1
这是一篇关于系统时钟在不同操作系统下准确性的有趣演讲(由Java并发开发人员David Holmes提供):http://blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clocks - Tim Schmelter
基本上我们正在从Java移植一些代码,因此正在努力保持两个代码库之间的等价性。我们已经有了一个基于Thread.SpinWait的等待策略。这个代码使用parknanos,我们正在尝试找到一个等效的替代方案。 - Jimit
2个回答

1

1
等待的持续时间取决于处理器的速度,因此不是非常可预测的。 - Tudor
也许吧 - 但它可以让你等待更短的时间间隔。Thread.Sleep 只能给你大约100毫秒的精度。此外,你可以使用Diagnostics.StopWatch来测量你等待了多长时间。http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx - Arnon Rotem-Gal-Oz
1
这样做的主要缺点是它会一直占用资源。但是根据OP的要求,这是必要的牺牲。 - CodesInChaos
@CodeInChaos - 没错,但我认为在 .Net 中你做不到比那更好。 - Arnon Rotem-Gal-Oz
你说得对,CodeInChaos。如果可能的话,我想避免繁忙等待。 - Jimit

0

我认为StopWatch类是基于QueryPerformanceCounter的,因此您不需要任何手动交互操作。 - CodesInChaos
@CodeInChaos 你说得对 - 我的知识有点陈旧,我一直认为框架中必须有一个类,但是除了我在旧的 .net2 时代所做的事情之外,我找不到任何东西 - 把它作为答案添加进去吧。 - Shaun Wilde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接