一个用作管理元素的类:
GetList()函数得到实例内所有元素的名字。
Add()函数新建一个元素。
Remove()函数删除一个元素。
现在它的一个实例能被多个线程访问。我希望这个实例的GetList()函数可被不同线程同时调用,但此时要阻塞Add()函数和Remove()函数的调用,如何做到?难点是:允许所有线程同时调用pABC->GetList()。
若是在类中设一个Mutex,三个函数在运行时取得它得所有权,则必定会令所有线程不能同时调用pABC->GetList(),违背我意愿。如何协调这个矛盾?
解决方案 »
- 一个系统时间的问题
- bento4,写MP4文件时,遇到的困难。
- DirectShow error C2065: “IMoniker ”: 未声明的标识符
- 模态对话框
- 怎样从一个CString中取出一些字符?
- 请问如何获得一个进程的ID
- 《深入浅出MFC>>第三章关于编译和链接的设置问题,前辈,助小弟一臂之力!
- 关于Windows字体,欢迎来做客解答,高分相赠
- 常常以为星际高手对恃会让人血气方涨,今天看了(精华区)111222与masterZ的对话,又一次让我激情澎湃,真是天外有天
- 如何实现全屏?
- 为什么ChttpFile::GetFileLength函数在ie没有读取url文件的时候无法得到文件的长度,该如何得到正确的http文件长度
- CoCreateInstance()奇怪的失败?
static int i=0;GetList()
{
i++;
....
i--;
}
在Add()和Remove时判断i是否为0;如果是才可以继续做。
WaitForSingleObject(m_hMutex,INFINITE);
而GetList()的第一句用
WaitForSingleObject(m_hMutex,50);这样可部分地实现我的要求,仅仅是有个潜在性的安全问题:当GetList()没得到mutex的所有权并在运行中,此时刚好其它线程又调用了remove(),此时会不会引起读取无效指针错误呢?
重载那个LIST,
加一个关键区(CriticalSection),
并重载Add()和Remove()函数。
在进入关键区后才可以调用基类的这两个函数。GetList()就不用管了。
因为这时多个线程可以同时使用这个LIST了。