注意:我不在尋找解決方法;如果有必要,我相信我可以找到其他方法。我只是覺得我錯過了一些基本或古怪的東西,我想知道我錯過了什麼。或者,如果有一種方法可以使用調試器來獲取更多的信息,那也不錯。謝謝!同步未輸入
我遇到了使用同步的問題。我收到了僵局,但似乎完全不可能。我已經在每次同步調用之前放置了打印語句,就在每次調用之前,並且在退出之前,我可以看到誰擁有哪些同步對象。我發現它不會進入我的一個同步調用中,即使當前沒有人持有該對象上的鎖。是否有某種我錯過的或者非法嵌套操作的怪癖?這是我正在做的事情。
噢,和最奇怪的事情是,去掉兩個 「busyFlagObject」 同步使得它做工精細...
主題1:
public void DrawFunction()
{
synchronized(drawObject)
{
...
// Hangs here though nobody has a lock on this object
synchronized(animationObject)
{
}
}
}
線程2:
public void AnotherFunction()
{
synchronized(busyFlagObject)
{
// Calls a function that also uses this same Synchronized call
synchronized(busyFlagObject)
{
// Calls another function that uses another Synchronized call
// Hangs here waiting for the draw function to complete which it SHOULD
// be able to do no problem.
synchronized(drawObject)
{
}
// Never gets to this one assuming the Log statements don't
// buffer and aren't flushed but still shouldn't be a problem anyway.
synchronized(animationObject)
{
}
}
}
}
如果刪除嵌套的'busyFlagObject'同步化之一會發生什麼? – Archer
您確定問題出在您的同步塊中,而不是您從其調用的函數中?您是否嘗試刪除線程同步和日誌以外的所有內容? – Leonidos
只刪除一個busyFlagObject仍然會導致相同的死鎖。我沒有嘗試刪除函數中的代碼,但它只是我已經顯示的那麼深。沒有顯示的東西只是數學運算或變量設置。我知道它掛在同步調用上,因爲調試器顯示兩個線程停留在它們上面。 – CodeMonkey