SOS:关于多线程中内存传递及释放的问题
cber 2001-09-06 03:56:40 一个程序,有一主控线程及多个辅助线程。现在我们在辅助线程中申请了一块内存,把指向它的指针传递给主控线程,然后在主控线程中删除掉这块内存。结果在Release版本中,我们在debug它时发现:在删除内存时有exception抛出。
辅助线程与主控线程之间并没有任何的同步或互斥机制,采取了轮换时间片的方式协同工作:-(
指针的传递是通过往主控线程中发消息时把指针作为消息的lParam传递过去的
由于是马上要release出去的版本,所以不可能在现在对整个程序进行大的改动,而且在整个程序中又大量地使用了上面的方法,因此希望各位高手能够指点出一个暂时可行的解决方案,谢谢。
附示例代码如下:
//主控线程
MainThread::processmessage(wParam, lParam)
{
//do the message-drived action
delete lParam;
//告诉辅助线程消息处理完毕
}
//辅助线程
AssistandThread::genmsg()
{
p = malloc(size);//此处与delete不匹配,但不是问题的重点所在
//prepare msg
msg.lParam = p;
PostThreadMessage(mainThrId,msg,wParam,lParam);
//以下是我所说的轮换时间片的工作方式实现
while(1)
{
//当得到从主控线程中发送过来的消息被处理完毕的机制时
break;
}
//other actions
}