- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这是我面临的某种异常死锁吗?如何避免?
看看下面一行,我将已连接客户端的 TIdContext 对象存储在一个对象列表中,有时我需要处理它。但是如果一个用户在另一个线程正在处理列表时断开连接,那么对于那个释放的 TIdContext->Data 对象,我得到了 Access voilation,好的,我正在使用 try/catch 但问题是在下面一行有某种死锁和进程挂起,如果我附加调试器,它会一次又一次地显示 Access voilation,并且 cpu 消耗量会因为该异常死锁而上升。
AnsiString UserID = ((Tmyobject*) ((TIdContext*) ObjList->Objects[i])->Data)->UserID;
我知道我可以在访问对象之前检查,如果对象不是 Null,它就可以工作。但是我的问题是,如果在一个蓝色的月亮中,数据对象在执行 NULL 检查时被释放,然后在下一个当我再次访问该对象时,我得到了同样的死锁???
那么如何避免/处理这种死锁异常呢?
这是调用堆栈...
:005F07C0 System::AnsiStringBase::AnsiStringBase(this=:0285FCE0, src=????)
:0040223F System::AnsiStringT<0>::AnsiStringT<0>(this=:0285FCE0, src=:00000008)
:00457996 TSomeClass::SomeFunction(this=:009D8230, UserID={ }, DataSize={ }, )
:0047BFF1 __linkproc__ ThreadProc(Thread=:009561C0)
:004AD00E __linkproc__ ThreadWrapper(Parameter=:009EAA30)
:7c80b729 ; C:\WINDOWS\system32\kernel32.dll
请帮忙pppppppppppppppppppppp
谢谢
最佳答案
不要使用 try/catch 来处理访问冲突。这些不是 Java NullPointerExceptions,try/catch 无法处理它们造成的破坏。而是修复底层错误。
A deadlock是指两个或多个线程永远卡住,等待彼此做某事。你拥有的是 race condition : 一个线程正在更新对象列表,而另一个线程正在尝试使用它,如果第一个线程完成得太快,它可能会无意中破坏第二个线程。
处理竞争条件的标准方法是在所有使用竞争资源的代码周围放置某种锁,这样使用它的线程就会礼貌地轮流使用,而不是相互竞争。阅读互斥量:它们是一个简单的同步原语,但可能足够强大以解决您的问题。
关于C++ Builder 2010 异常死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2485247/
我有类似下面的代码: ... id: myComponent signal updateState() property variant modelList: [] Repeater { mo
我正在处理一些我无法展示的私有(private)代码,但我已经制作了一些示例代码来描述我的问题: 主.c: #include #include #include #include typede
这个问题在这里已经有了答案: 关闭10 年前。 Possible Duplicate: what are the differences in die() and exit() in PHP? 我想
在编写 Perl 模块时,在模块内部使用 croak/die 是一个好习惯吗? 毕竟,如果调用者不使用 eval block ,模块可能会使调用它的程序崩溃。 在这些情况下,最佳做法是什么? 最佳答案
我有一些搜索线程正在存储结果。我知道当线程启动时,JVM native 代码会代理在操作系统上创建新 native 线程的请求。这需要 JVM 之外的一些内存。当线程终止并且我保留对它的引用并将其用作
我刚刚花了很多时间调试一个我追溯到 wantarray() 的问题。 .我已将其提炼为这个测试用例。 (忽略 $! 在这种情况下不会有任何有用信息的事实)。我想知道为什么wantarray在第二个示例
我看到一些代码是这样做的: if(something){ echo 'exit from program'; die; } ...more code 和其他只使用 die 的人: if
我正在尝试将此表格用于: 如果任何 $_POST 变量等于任何其他 $_POST 变量抛出错误。 如果只有几个,那不是问题,但我有大约 20 个左右所以如果我想这样做,我将不得不像这样 但这
每次我运行: hadoop dfsadmin -report 我得到以下输出: Configured Capacity: 0 (0 KB) Present Capacity: 0 (0 KB) DFS
我是一名优秀的程序员,十分优秀!