还是关于主线程中new,两个子线程读操作,最后delete的有关问题。新手学习,不知道怎么下手,请赐教:理顺一下思路。不胜感激

还是关于主线程中new,两个子线程读操作,最后delete的问题。新手学习,不知道如何下手,请赐教:理顺一下思路。不胜感激!
在主线程中分配new一块内存区,存有数据1、数据2、数据3.

同时创建2个子线程访问该内存区,其中

线程1需要访问数据1、数据2

线程2需要访问数据1、数据3

两个线程都是对数据进行读操作,不修改内存区的数据。

当两个线程都完成了对内存区数据的访问,才释放delete内存区。

问题1:
  因为仅仅是对内存区数据进行读操作。是不是可以不用线程同步?
问题2:
  内存区是在主线程中delete合理?还是在子线程中delete合理?
  如果是在主线程中delete,那么怎么判断两个子线程是否已经结束了对内存区的访问?难道还是线程同步方式??
  如果是在子线程中delete,那么怎么判断另一个子线程是否结束了对内存区的访问?  

新手学习,不知道如何下手,请赐教:理顺一下思路!,谢谢!



------解决方案--------------------
1. 都是读,就不需要同步了,都直接读好了
2. 谁new的,谁负责delete比较好,
3. 主线程跟子线程要同步,可以通过event等来通知
4. 两个子线程之间要同步.
------解决方案--------------------
若都只是读,两个子线程间不用同步的了,对于删除当然是在主线程较好(个人观点),但估计你的主线程会要用到两个子线程的结果的,这就要同步了的,多个线程共享内存但两个子线程不执行写操作,所以在这里我觉得用CEvent比较好,只要保证与主线程间的同步就行,用临界区间也可以实现,
若只是读觉得还是在主线程里delete好些,若在子线程中delete则要保证这二者这间也要同步了,还不排除你主线程要用到这块内存的情况
看看WaitForMultilObject与临界区的用法
------解决方案--------------------
1. 一写多读不需要同步
2. 谁new的,谁delete
3. waitmultiobjects,子线程read之后 setevent,或者wait 子线程退出,在delete
4. 子线程要同步,但是,一定要注意不要死锁
------解决方案--------------------
如果主线程有窗口,那么可以把窗口句柄传入子线程,当子线程退出的时候,给窗口发消息,然后主线程在消息响应里delete。这样就可以做到主线程new和delete
------解决方案--------------------
问题1:
因为仅仅是对内存区数据进行读操作。是不是可以不用线程同步?
读就不用同步了,只要不修改就没问题。

问题2:
内存区是在主线程中delete合理?还是在子线程中delete合理?
如果是在主线程中delete,那么怎么判断两个子线程是否已经结束了对内存区的访问?难道还是线程同步方式??
如果是在子线程中delete,那么怎么判断另一个子线程是否结束了对内存区的访问? 

1楼的大牛也说了,谁new谁delete比较好,
比如 char* pBuf = new char[20];
不适用的时候delete[] pBuf,同时也将pBuf=NULL即可,这样你的线程要访问该变量的时候先判断一下pBuf是否为空,如果为空,肯定是被delete了。

------解决方案--------------------
第一个问题,不需要线程同步
第二个问题,应该是在主线程处理比较合理,子线程只涉及工作逻辑,这样比较简单
删除之前是需要确认子线程已经退出,或者已经完成访问
------解决方案--------------------
1. 谁new谁delete
2. 释放的时候要判断 两个子线程都完成了工作,注意别死锁。看看能否设定子线程读完数据的标识,