向大家请教一个多线程问题
向大家请教一个多线程问题
有二个线程a和b, a线程在循环中调用实例a1, b线程在循环中调用实例b2,二个线程都是死循环.
现在二个线程出现的问题 是b线程调用b2实例时,由于a线程调用的实例也是操作同一个最终对像,造成最终接受数据的对像调用冲突而崩溃。最终对像不受程序控制,所以无法对最终对像用临界区或者锁定.
请问有什么办法在b线程调用b2实例前,可以先暂停一下a线程,等b线程调用b2函数完毕后,再恢得a线程的运行。因为判断是否满足需要暂停a线程的条件是在b2实例内部,这里想不明白怎么处理。
因为a线程使用函数的频率很高,而b线程使用函数的频率比较低,但优先级是最高的。
[解决办法]
你使用临界区的方法有误,2个线程函数里,访问同个对象前后进入同个临界区对象就可以避免你这个问题。
创建临界区全局对象cri: TCriticalSection;
然后a和b线程中访问你对象前cri.Enter,访问结束cri.Leave,建议用try finally防止异常造成死锁。
[解决办法]
什么叫 最终对像不受程序控制 ,两个线程,怎么就不能控制同步了,既然线程是你创建的,你就完全可以通过临界等手段,放置对象被同时访问
[解决办法]
贴出代码吧、。。临界区,信号量等。
就是用来解决同步和互斥访问的。。
你确定你写对了???
[解决办法]
临界区,信号,互斥