免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3550 | 回复: 2
打印 上一主题 下一主题

[学习] 链表加锁问题 ,要求精确到语句 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-29 18:29 |只看该作者 |倒序浏览
int list_delete(lnode_t **phead ,void *pdata,cmp_func_t cmp,free_func_t free_data)
{
if(*phead == NULL || pdata == NULL || cmp == NULL)
return FAILED;

lnode_t *ptmp =  *phead;
lnode_t *pprev = *phead;

while(ptmp != NULL)
{
    //if是命中后的处理,只有一个地方是返回SUCCESS
if(cmp(ptmp->pdata,pdata) == 0)
{
    if(ptmp == *phead)
    {   
    *phead = ptmp->pnext;
    }
    else
    {
    pprev->pnext = ptmp->pnext;
    }


free_data(ptmp->pdata);
free(ptmp);
return SUCCESS;
}
//这两句在while里面
pprev = ptmp;
ptmp = ptmp->pnext;
}

return FAILED;
}
以上是 链表函数,哪位大哥能给加个锁 ,有while 和 if 就不会加了 ,要求精确到语句
我是这么干的 ,头说不行

原来的函数改名,然后新函数调用原来的函数。
int list_delete(lnode_t **phead ,void *pdata,cmp_func_t cmp,free_func_t free_data)
{
    int ret;

    pthread_mutex_lock();
    ret = list_delete_single_thread(phead, pdata, cmp, free_data);
    pthread_mutex_unlock();
    return ret;
}

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2012-11-29 21:35 |只看该作者
你觉得需要同步的地方就同步, 频繁的加锁和放锁是性能损耗, 选择适当的锁粒度是最重要的.

论坛徽章:
0
3 [报告]
发表于 2012-11-30 11:18 |只看该作者
楼主又来了?问题还没有解决
就楼主的程序来说,加锁的粒度已经很小了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP