注意:我不在寻找解决方法;如果有必要,我相信我可以找到其他方法。我只是觉得我错过了一些基本或古怪的东西,我想知道我错过了什么。或者,如果有一种方法可以使用调试器来获取更多的信息,那也不错。谢谢!同步未输入
我遇到了使用同步的问题。我收到了僵局,但似乎完全不可能。我已经在每次同步调用之前放置了打印语句,就在每次调用之前,并且在退出之前,我可以看到谁拥有哪些同步对象。我发现它不会进入我的一个同步调用中,即使当前没有人持有该对象上的锁。是否有某种我错过的或者非法嵌套操作的怪癖?这是我正在做的事情。
噢,和最奇怪的事情是,去掉两个 “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