我想用锁来维护某一在堆上的资源,当锁与资源具有相同生命周期时,
资源的同步由锁维护,那锁的同步由谁来维护呢? 似乎有点自相矛盾。
谁能帮帮我,如何解决该资源同步问题?
eg:lock_type* lock;
resource_type* resource;... ...void func()
{
if(NULL != lock)
{
// 若执行到此处,切换到另一线程并且把锁释放了,崩溃
lock->Lock();
if(NULL != resource)
{
use(resource);
delete resource;
resource = NULL;
}
lock->UnLock(); if(NULL == resource)
{
delete lock;
lock = NULL;
}
}
}
资源的同步由锁维护,那锁的同步由谁来维护呢? 似乎有点自相矛盾。
谁能帮帮我,如何解决该资源同步问题?
eg:lock_type* lock;
resource_type* resource;... ...void func()
{
if(NULL != lock)
{
// 若执行到此处,切换到另一线程并且把锁释放了,崩溃
lock->Lock();
if(NULL != resource)
{
use(resource);
delete resource;
resource = NULL;
}
lock->UnLock(); if(NULL == resource)
{
delete lock;
lock = NULL;
}
}
}
解决方案 »
- ATL中怎么使用CStdioFile类
- 双缓冲 GDI画图 颜色不对
- 线程所耗CPU问题,结贴!!
- 怎样知道自己的VS2008是不是正版?
- 响应CListCtrl鼠标双击后怎样进行处理啊???
- 请问:如何知道局域网中其它机器是什么操作系统?
- Leap motion sqrt is not a member of std
- 内地人跑到沿海去捞人民币,沿海人跑到香港去搞港元,我想去波斯湾赚美金?
- 如何在视类德ondraw函数中打印Doc类的double或者int成员(菜鸟级问题)
- 我是一个小小程序员--你认同吗?
- MFC程序+SQL server2000数据库的管理系统,在另一台只有安装VC6.0而没有装SQl2000的机子上能运行吗?
- 求大哥大姐帮助: 在MFC窗口函数下绘制管道 要求如题 期待中....
这里的锁也是在堆上分配的,它的指针指向的内存也需要保持同步
{
if(NULL != lock)
{
// 线程1:若执行到此处,切换到 线程2 并且把锁销毁了,崩溃
lock->Lock();
if(NULL != resource)
{
use(resource);
delete resource;
resource = NULL;
}
lock->UnLock(); if(NULL == resource)
{
delete lock; // 线程2:销毁锁,此时 线程1 执行lock->Lock()时不就崩溃了吗?
lock = NULL;
}
}
}谁能帮我解决一下,谢谢