Linux驱动开发中的信号量 API

350阅读 0评论2012-10-23 king370
分类:

       与信号量相关的API主要有:


  定义信号量 :struct semaphore sem;



  初始化信号量 :void sema_init (struct semaphore *sem, int val);
        该函数初始化信号量,并设置信号量sem的值为val

  void init_MUTEX (struct semaphore *sem);
      该函数用于初始化一个互斥锁,即它把信号量sem的值设置为1,等同于
  sema_init (struct semaphore *sem, 1);

  void init_MUTEX_LOCKED (struct semaphore *sem);
      该函数也用于初始化一个互斥锁,但它把信号量sem的值设置为0,等同于
  sema_init (struct semaphore *sem, 0);

      获得信号量
  void down(struct semaphore * sem);
      该函数用于获得信号量sem,它会导致睡眠,因此不能在中断上下文使用;

  int down_interruptible(struct semaphore * sem);
      该函数功能与down类似,不同之处为,down不能被信号打断,但down_interruptible能被信号打断;可被中断睡眠,当信号来到,睡眠的任务被唤醒
  

    int down_trylock(struct semaphore * sem);
      该函数尝试获得信号量sem,如果能够立刻获得,它就获得该信号量并返回0,否则,返回非0值。它不会导致调用者睡眠,可以在中断上下文使用

        释放信号量
  void up(struct semaphore * sem);
      该函数释放信号量sem,唤醒等待者。

上一篇:Linux驱动开发中的信号量 API
下一篇:tcpdump的使用