假设线程1使用
现在假设在此阻塞期间发生了上下文切换,因为有其他线程和应用程序正在等待运行。线程1再次处于Running状态并能够获取锁的耗时是否取决于操作系统计时器分辨率(例如,在Windows 7上默认为15.6毫秒)?
如果上面问题的答案是肯定的,那么我还有一个疑问:
很容易创建一个简单的程序,使用Stopwatch测试
1)很难确保尝试获取锁的线程将始终被阻塞(或至少知道它何时在获取锁之前被阻塞);
2)我不知道何时总是可以强制进行上下文切换,当当前运行的线程阻塞时是否总是会进行上下文切换?
任何帮助都将不胜感激。
lock(lockObj)
语句尝试在lockObj对象上获取锁,但此时该对象已被线程2锁定。那么线程1会被阻塞,对吗?现在假设在此阻塞期间发生了上下文切换,因为有其他线程和应用程序正在等待运行。线程1再次处于Running状态并能够获取锁的耗时是否取决于操作系统计时器分辨率(例如,在Windows 7上默认为15.6毫秒)?
如果上面问题的答案是肯定的,那么我还有一个疑问:
很容易创建一个简单的程序,使用Stopwatch测试
Thread.Sleep(1)
的平均开销,并得出它收敛于操作系统计时器分辨率(例如15.6ms)。但我发现很难创建一个程序来获取相同结论的lock语句。主要是因为:1)很难确保尝试获取锁的线程将始终被阻塞(或至少知道它何时在获取锁之前被阻塞);
2)我不知道何时总是可以强制进行上下文切换,当当前运行的线程阻塞时是否总是会进行上下文切换?
任何帮助都将不胜感激。