免费注册 查看新帖 |

Chinaunix

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

用mutex实现semaphore [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-18 13:53 |只看该作者 |倒序浏览
想了一下,没有办法呢

论坛徽章:
0
2 [报告]
发表于 2007-07-18 15:24 |只看该作者
貌似实现不了。。
类似的,还有,如何用semaphore实现condition ?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2007-07-18 19:07 |只看该作者
当semaphore只取0和1时,和mutex一样的吧。
我认为semaphore也实现不了condition。

论坛徽章:
0
4 [报告]
发表于 2007-07-18 22:07 |只看该作者
原帖由 lenovo 于 2007-7-18 19:07 发表
当semaphore只取0和1时,和mutex一样的吧。
我认为semaphore也实现不了condition。


没错, 用semaphore实现mutex没有问题的, 用mutex实现semaphore, 还真不好办.

论坛徽章:
0
5 [报告]
发表于 2007-07-18 23:18 |只看该作者
如果一定要实现的话,也可以,只是比较繁

论坛徽章:
0
6 [报告]
发表于 2007-07-19 00:03 |只看该作者
原帖由 cnshibo 于 2007-7-18 23:18 发表
如果一定要实现的话,也可以,只是比较繁


请问怎么做呢

论坛徽章:
0
7 [报告]
发表于 2007-07-19 13:24 |只看该作者
原帖由 cnshibo 于 2007-7-18 23:18 发表
如果一定要实现的话,也可以,只是比较繁


光说不练啊!!

用semaphore实现condition, 我从boost里面学了一段,已经没有问题了。
用mutex实现semaphore,怎么做呢?

论坛徽章:
0
8 [报告]
发表于 2007-07-19 13:41 |只看该作者
理论上mutex可以实现所有的同步原语。
mutex+counter+queue应该可以实现semaphore了

论坛徽章:
0
9 [报告]
发表于 2007-07-19 16:40 |只看该作者
假设在用户态实现,假设 Mutex 可以跨线程。仅仅实现了一个信号量。

Mutex M_counter;
Mutex *free_queue;
Mutex *peding_queue;
int count = 0;

semaphore_take()
{
    mutex_take(M_counter);
    count--;
    mutex_give(M_counter);

    if (count < 0)
    {
        mutex_id = get_a_free_mutex();
        append_to_peding_queue(mutex_id);
        mutex_take(mutex_id);
    }
}


semaphore_give()
{
    mutex_take(M_counter);
    count++;
    mutex_give(M_counter);

    mutex_id = get_first_pending_mutex();
    append_to_free_queue(mutex_id);
    mutex_give(mutex_id);
}

论坛徽章:
0
10 [报告]
发表于 2007-07-19 17:04 |只看该作者
原帖由 0521 于 2007-7-19 16:40 发表
假设在用户态实现,假设 Mutex 可以跨线程。仅仅实现了一个信号量。

Mutex M_counter;
Mutex *free_queue;
Mutex *peding_queue;
int count = 0;

semaphore_take()
{
    mutex_take(M_counter);
  ...


为了效率,看来需要在系统里维护一个全局mutex queue,
谢谢你,应该可以了,虽然这个全局queue让偶很不爽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP