English 中文(简体)
是否有样本代码, @同步将会陷入僵局?
原标题:Is there a sample code where @synchronized will deadlock?

我真的想都想不出来

我能想到的一件事是

@synchronized (self)
{
@synchronized (self){}
}

但是这不会陷入僵局,因为锁是循环性的, 并且只会允许同样的线条通过。 所以基本上,如果整个程序只使用一个变量, 你就不能陷入僵局。

我能想到的另外一个是

@synchronized (A)
{
@synchronized (B){}
}

在一个线条中

@synchronized (B)
{
@synchronized (A){}
}

在另一处,我说得对吗?

那么,如何避免僵局?

最佳回答

My #1 rule is never lock on anything that is publicly visible.
My #2 rule is never call out to external code whilst holding a lock.

我发现,如果你能处理好这两点,任何可能出现的僵局都很容易发现,而且更容易解决。

问题回答

在有共享资源的地方,使用同源货币是一无是处的;总是有陷入僵局的风险,总是有数据因非原子性而出现腐败的风险,而且由于所有锁锁锁,完全同时启用的代码将比单行代码慢的风险总是不简单。

“最佳”模式是隔离; 使交叉线/ 排卵层尽可能小, 并把后面的一切都隔离在一条线上。

核心数据是这种模式的一个很好的例子。 管理的对象环境是全透的, CD管理完全在幕后通过特别经过单位测试的基础设施管理并行的数据储存。





相关问题
Silverlight, Updating the UI during processing

I have a simple silverlight multifile upload application, and i want to provide the user with some feedback, right now its only in a test phase and i dont have the webservice. Somehow i cant get the ...

Is reading from an XmlDocument object thread safe?

I was wondering if i could safely read from an XmlDocument object using SelectNodes() and SelectSingleNode() from multiple threads with no problems. MSDN says that they are not guaranteed to be ...

Terminating a thread gracefully not using TerminateThread()

My application creates a thread and that runs in the background all the time. I can only terminate the thread manually, not from within the thread callback function. At the moment I am using ...

热门标签