windows seh 如何处理线程锁的问题

Hiei1234 2013-09-09 05:32:18
有这样一段代码

boost::mutex mtx_n;

void foo_set(void)
{
boost::mutex::scoped_lock lk(mtx_n);
std::cout << "thread_id " << boost::this_thread::get_id() << " call "<< std::endl
//A a; //这个也是一样 没有调用析构
int *p = 0;
*p = 100;
}

template<typename Handler>
void safe_call(const Handler& foo_handler )
{
__try
{
__try
{
foo_handler();
}
__finally
{
std::cout << AbnormalTermination() << std::endl;
}
}
__except(filter(GetExceptionCode(), GetExceptionInformation()))
{
std::cout << "thread_id " << boost::this_thread::get_id() << " jump ok"<< std::endl;
}
}

//调用

safe_call(boost::bind(&foo_set));
safe_call(boost::bind(&foo_set)); // 第二次调用时 会因为lk没有被释放 导致析构函数没执行
// 所以第二次就卡住了
请问各路神仙有没有办法 把这个函数堆栈上的对象释放掉

...全文
100 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hiei1234 2013-09-09
  • 打赏
  • 举报
回复
补充一下 把lock放到外面来的话是没有问题的 boost::mutex::scoped_lock lk(mtx_n); safe_call(boost::bind(&foo_set)); 但这样的话限制就太多了,而且所有lock的地方都要这样写了

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧