zoukankan      html  css  js  c++  java
  • Linux信号量线程控制

     线程中互斥锁的使用,达到对共享资源互斥使用。除了使用互斥锁,信号量,也就是操作系统中所提到的PV原语,能达到互斥和同步的效果,这就是今天我们所要讲述的信号量线程控制。

    PV原语是对整数计数器信号量sem的操作,一次P操作可使sem减一,而一次V操作可是sem加一。进程(或线程)根据信号量的值来判断是否对公共资源具有访问权限。当信号量的值大于零或等于零的时候,该进程(或线程)具有对公共资源访问的权限,否则,当信号量的值小于时,该进程(或线程)就会被阻塞,直到信号量的值大于或等于一。

    1、在LINUX中,实现了POSIX的无名信号量,主要用于线程间的互斥同步,下面将简单介绍一些函数接口:

    (1)、sem_init

    功能:         用于创建一个信号量,并初始化信号量的值。

    头文件:       <semaphore.h>

    函数原型:     int sem_init (sem_t* sem, int pshared, unsigned int value);

    函数传入值:   sem:信号量。

                       pshared:决定信号量能否在几个进程间共享。由于目前LINUX还没有实现进

                                   程间共享信息量,所以这个值只能取0。

    函数返回值:   0:成功。

                       -1:失败。

    (2)其他函数。

    int sem_wait       (sem_t* sem);

    int sem_trywait   (sem_t* sem);

    int sem_post       (sem_t* sem);

    int sem_getvalue (sem_t* sem);

    int sem_destroy   (sem_t* sem);

    功能:sem_wait和sem_trywait相当于P操作,它们都能将信号量的值减一,两者的区别在

            于若信号量的值小于零时,sem_wait将会阻塞进程,而sem_trywait则会立即返回。

            sem_post相当于V操作,它将信号量的值加一,同时发出唤醒的信号给等待的进程

           (或线程)。

            sem_getvalue 得到信号量的值。

            sem_destroy 摧毁信号量。

    函数传入值: sem:信号量。

    函数返回值: 同上。

    2、函数实现。

  • 相关阅读:
    函数waitpid和WTERMSIG说明(转)
    WIFEXITED WEXITSTATUS WIFSIGNALED(转)
    有关于malloc申请内存和free内存释放
    Using 1-Wire device with Intel Galileo
    Intel Galileo驱动单总线设备(DHT11DHT22)(转)
    360度舵机和180度舵机控制方法小结(转)
    warning: the `gets' function is dangerous and should not be used.(转)
    C语言fgetpos()函数:获得当前文件的读写指针(转)
    关于arduino清空串口缓存(转)
    修改Arduino串口缓冲区大小(转)
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9410141.html
Copyright © 2011-2022 走看看