【发布时间】:2015-01-22 19:32:19
【问题描述】:
我想了解一个简单的场景,其中有这么多线程竞争同步共享资源。只有一个线程肯定会获得资源锁,所有其他线程必须等待,现在在资源可用性上,每个等待线程将再次尝试获得锁,如果失败则再次暂停以进行下一次尝试。这种情况是否不会增加上下文切换开销,因为线程一次又一次地暂停和恢复以获取资源。我只是想问一下,1)同步开销和上下文切换开销之间是否存在直接比例关系 2)在任何算法中通过锁引入更多共享变量会增加上下文切换开销,即共享资源的数量和上下文切换开销
我说的对吗?
现在我的第二个问题是“如果在上述场景中使用非阻塞算法进行同步,即如果将原子变量用作共享资源,那么在原子共享资源的情况下上下文切换开销的影响是什么”。共享资源的竞争线程是否不会暂停或恢复,即如何处理这种非阻塞同步现象?
【问题讨论】:
-
这似乎是家庭作业。
-
这不是家庭作业。我只是想澄清我的概念。请在你能回答的情况下回复
-
我不知道
synchronized在 JVM 中的实际工作原理,但我猜测只要有多个 CPU,它就是一种混合实现,其中锁定互斥锁的比赛的失败者将旋转一小会儿,如果互斥锁的所有者持有它太久,只有 yield() (即放弃它的时间片)。 (en.wikipedia.org/wiki/Spinlock) -
使用并发实用程序,避免通知所有问题。
标签: java multithreading synchronization nonblocking context-switch