伊韵吧

主要探索苹果编程、苹果高级本地化技术。 版权所有,转载请先申请! _______________________________ Talk about Programming & Advanced Localization Tech. on Mac OS X. Please apply before citing! _______
    <<  麦克孤独本地化组织现在报名 | 首页 | Xcode 环境下的汇编与 C/C++/ObjC (上)  >>
  • 苹果 POSIX 信号量 - [苹果 UNIX 编程技术]

    2007-08-27

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://51test2003.blogbus.com/logs/7952923.html

    苹果Mac OS X10.4只部分实现了 POSIX 有名信号量,未实现 POSIX 无名信号量。这点与Linux

    相反,移植时请注意。

     POSIX 有名信号量可用函数包括打开/关闭,PV操作。

     值得注意的是:苹果未实现sem_getvalue()函数!! 

    解决之道——自己从mach封装semaphore。

    #include <mach/semaphore.h>

    #include <mach/task.h>

    #include <mach/mach.h>

     

    typedef struct sem_t {

        semaphore_t msem;

        int value;

    }  sem_t;

    int sem_init(sem_t *sem, int pshared, int initialValue)

    {

        int result;

        result = semaphore_create(mach_task_self(), &(sem->msem), SYNC_POLICY_FIFO, initialValue);

        sem->value = initialValue;

        return result;

    }

     

    int sem_destroy(sem_t *sem)

    {

        int result;

        result = semaphore_destroy(mach_task_self(), sem->msem);

        sem->value = -1;

        return result;

    }

     

    int sem_wait(sem_t *sem)

    {

        int result;

        result = semaphore_wait(sem->msem);

        if(result == 0)

    --(sem->value);

        return result;

    }

     

    int sem_trywait(sem_t *sem)

    {

        int result;

        mach_timespec_t wait_time = {0, 0};

        result = semaphore_timedwait(sem->msem, wait_time);

        if(result == 0)

    --(sem->value);    

        return result;

    }

     

    int sem_post(sem_t *sem)

    {

      int result;

        result = semaphore_signal(sem->msem);

        if(result == 0)

    ++(sem->value);

    return result;

    }

     

    int sem_getvalue (sem_t *sem, int *sval)

    {

         if(sem == NULL)

    return -1;

         return *sval = sem->value;

    }

     


    历史上的今天:

    麦克孤独本地化组织现在报名 2007-08-27
    Cocoa 教程 第一讲 Objective C 语法(一) 2007-08-27
    Cocoa 教程 篇外语 Objective C 与 C 、C++ 的关系及调用实现 2007-08-27

    随机文章:

    Xcode 单元测试介绍 (C/C++ 篇) 2008-12-24
    Xcode 单元测试介绍 (Objective C 篇) 2008-12-24
    苹果 Xcode 2.4.1 简体中文版发布 2007-08-25
    iNeddy 项目 Google Code 开通 (开发项目) 2008-12-30
    超链接样式的按钮 (NSButton 扩展<光标与富文本>) 2008-12-27

    收藏到:Del.icio.us




    16:54:47 | 编辑 | 继续话题 | 转发 | 分享 0

搜索

最新日志

  • Xcode 3.1.3 中文包内部版本发布啦
  • 飞鸽传书 (Mac OS X) 新版发布
  • Xcode 3.1.2 本地化重新启动! Xcode (v3.1.2) localization resumed!
  • iNeddy 项目 Google Code 开通 (开发项目)
  • 超链接样式的按钮 (NSButton 扩展<光标与富文本>)
  • Nib 格式完全破解Nib hacked Complete!
  • Xcode 单元测试介绍 (C/C++ 篇)
  • Xcode 单元测试介绍 (Objective C 篇)
  • Squish 自动化测试工具的使用
  • AsyncSocket 类使用示例
全部日志>>

最新评论

  • xiao:你的老窝怎么荒凉了这么久了,3个月没更新了...
  • xiao:这也能找到你的老窝,人~~~~,再这样叫你,不知会不会被...
  • ray:什么意思?没看懂。 我想打开一个iphone软件里...
  • 培培:不错是不错。。但是不支持SnowLeopard的安装哦。...
  • wuei9090:怎么没更新呢 很想得到这方面知识、、 楼主ms...
  • jianyili:万分期待中,支持你,加油。...
  • 111:非常支持您....等51~~~
  • qdzzxxyy:为什么看不到了
  • zzxxyy:好久没在麦克孤独看到你了,大家都很想念你,看到你从新开始...
  • Jagie:来自于"The Objective-C 2.0 Prog...
Copyright © 2006-2008 RuinStudio All Rights Reserved.