在主线程中分配new一块内存区,存有数据1、数据2、数据3.同时创建2个子线程访问该内存区,其中线程1需要访问数据1、数据2线程2需要访问数据1、数据3两个线程都是对数据进行读操作,不修改内存区的数据。当两个线程都完成了对内存区数据的访问,才释放delete内存区。问题1:
因为仅仅是对内存区数据进行读操作。是不是可以不用线程同步?
问题2:
内存区是在主线程中delete合理?还是在子线程中delete合理?
如果是在主线程中delete,那么怎么判断两个子线程是否已经结束了对内存区的访问?难道还是线程同步方式??
如果是在子线程中delete,那么怎么判断另一个子线程是否结束了对内存区的访问? 新手学习,不知道如何下手,请赐教:理顺一下思路!,谢谢!
因为仅仅是对内存区数据进行读操作。是不是可以不用线程同步?
问题2:
内存区是在主线程中delete合理?还是在子线程中delete合理?
如果是在主线程中delete,那么怎么判断两个子线程是否已经结束了对内存区的访问?难道还是线程同步方式??
如果是在子线程中delete,那么怎么判断另一个子线程是否结束了对内存区的访问? 新手学习,不知道如何下手,请赐教:理顺一下思路!,谢谢!
2. 谁new的,谁负责delete比较好,
3. 主线程跟子线程要同步,可以通过event等来通知
4. 两个子线程之间要同步.
若只是读觉得还是在主线程里delete好些,若在子线程中delete则要保证这二者这间也要同步了,还不排除你主线程要用到这块内存的情况
看看WaitForMultilObject与临界区的用法
2. 谁new的,谁delete
3. waitmultiobjects,子线程read之后 setevent,或者wait 子线程退出,在delete
4. 子线程要同步,但是,一定要注意不要死锁
因为仅仅是对内存区数据进行读操作。是不是可以不用线程同步?
读就不用同步了,只要不修改就没问题。问题2:
内存区是在主线程中delete合理?还是在子线程中delete合理?
如果是在主线程中delete,那么怎么判断两个子线程是否已经结束了对内存区的访问?难道还是线程同步方式??
如果是在子线程中delete,那么怎么判断另一个子线程是否结束了对内存区的访问? 1楼的大牛也说了,谁new谁delete比较好,
比如 char* pBuf = new char[20];
不适用的时候delete[] pBuf,同时也将pBuf=NULL即可,这样你的线程要访问该变量的时候先判断一下pBuf是否为空,如果为空,肯定是被delete了。
2. 释放的时候要判断 两个子线程都完成了工作,注意别死锁。看看能否设定子线程读完数据的标识,