三种线程同步机制
    •互斥锁
    •信号量
    •条件变量
 
pthread_t thread_id;
主要函数
pthread_create(),pthread_exit(),pthread_join(),pthread_cancel()
pthread_mutex_t mutex;
互斥锁主要包括下面的基本函数:
  互斥锁初始化:pthread_mutex_init()
  互斥锁上锁:pthread_mutex_lock()
  互斥锁判断上锁:pthread_mutex_trylock()
  互斥锁解锁:pthread_mutex_unlock()
  消除互斥锁:pthread_mutex_destroy()
 
信号量
  操作系统中所用到的PV原子操作,广泛用于进程或线程间的同步与互斥
    •本质上是一个非负的整数计数器,被用来控制对公共资源的访问
  PV原子操作:对整数计数器信号量sem的操作
    •一次P操作使sem减一,而一次V操作使sem加一
    •进程(或线程)根据信号量的值来判断是否对公共资源具有访问权限
  –当信号量sem的值大于等于零时,该进程(或线程)具有公共资源的访问权限
  –当信号量sem的值小于零时,该进程(或线程)就将阻塞直到信号量sem的值大于等于0为止
 
PV操作主要用于线程间的同步和互斥
  互斥,几个线程只设置一个信号量sem
  同步,会设置多个信号量,安排不同初值来实现它们之间的顺序执行
 
信号量函数
  sem_init() 创建一个信号量,并初始化它
  sem_wait()和sem_trywait(): P操作,在信号量大于零时将信号量的值减一
    •区别: 若信号量小于零时,sem_wait()将会阻塞线程,sem_trywait()则会立即返回
  sem_post(): V操作,将信号量的值加一同时发出信号来唤醒等待的线程
  sem_getvalue(): 得到信号量的值
  sem_destroy(): 删除信号量

linux 线程备忘的更多相关文章

  1. linux 指令备忘

    linux 指令备忘 1.ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a 列出包括.a开头的隐藏文件的所有文件 -A 通-a,但不列出"."和"..& ...

  2. 常用linux命令备忘

    备忘: 关闭防火墙:# systemctl stop firewalld 查看防火墙状态:#  systemctl status firewalld 停止防火墙:#  systemctl disabl ...

  3. Linux iptables 备忘

    iptables主要通过存储在linux内核中的一个个表来控制IP包的.可以想象成excel表格.你可以自定义所需的iptables表.不过已经内置了三张队列表. filter 这是默认的表,包含了内 ...

  4. Linux指令备忘

    这是之前初学Linux时做下的笔记,根据现在的熟悉程度增删了一些,也是做上备份查看,希望能让有用的童鞋参考一二. //将使用到的内容输出到屏幕,仅检查语法 sh -nx scripts.sh //输出 ...

  5. 实用收藏Linux命令备忘

    系统操作 #使用shutdown命令马上重启系统[root@H32 ~]# shutdown –r now #使用shutdown命令马上关闭系统[root@H32 ~]# shutdown –h n ...

  6. Linux 命令备忘(持续更新中……)

    Linux命令 grep 1. 使用grep 筛选内容,多条件筛选用 grep - E "条件1|条件2" (满足条件1或条件2的均展示) 2. grep '条件3'|grep - ...

  7. linux命令备忘

    yum info softname 查看安装包信息 yum install softname 安装包名 安装 nginx http://jingyan.baidu.com/article/aa6a2c ...

  8. linux 命令 备忘

    openssl rand -base64 32 随机数 date | md5sum data 日期 cal 日历 man -f man sync 数据同步写入磁盘 shutdown reboot ha ...

  9. linux 进程备忘

    进程间同步互斥方式: 1.管道pipe(亲属进程适用),命名管道fifopipe 2.信号量 3.共享内存配合信号量

随机推荐

  1. mysql时间int日期转换

    select from_unixtime(1350437720);select unix_timestamp(now());插入用 unix_timestamp(date)查询用from_unixti ...

  2. github 使用方法总结 还有一部分不太懂

    1  github在新的目录下添加新的文件 git init //在相应的目录下添加 git add //添加目录 git commit -m "first commit" git ...

  3. swift代码排版-参考

    代码排版包括: 空行.空格.断行和缩进等内容.代码排版内容比较多工作量很多,但是非常重要. 空行 空行将逻辑相关的代码段分隔开,以提高可读性.下列情况应该总是添加空行: 类型声明之前. import语 ...

  4. 个人vim配置(.vimrc文件分享)

    syntax enable syntax on colorscheme desert set nu! set nowrap set nobackup set backspace= set tabsto ...

  5. 转:pthread_detach()函数

    创建一个线程默认的状态是joinable. 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码). 所以创建线程者应该调 ...

  6. PHP and java

    问题补充: 为什么不选用优秀的ASP.NET,京东做的不是很成功嘛?-----------------------------------------------------------------首 ...

  7. Android中开发Service

    Service的开发分为两个步骤:定义Service和配置Service1.定义Service定义一个Service子类继承于Service2.配置Service在AndroidManifest.xm ...

  8. ChangeServiceConfig2 function

    ChangeServiceConfig2 function   Changes the optional configuration parameters of a service. Syntax C ...

  9. 【HDOJ】1403 Longest Common Substring

    后缀数组2倍增可解. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXM 28 ...

  10. COJ WZJ的数据结构(负十八)splay_tree的天堂

    WZJ的数据结构(负十八) 难度级别:E: 运行时间限制:100000ms: 运行空间限制:700KB: 代码长度限制:2000000B 试题描述 对于前一段样例: 输入 输入文件的第1行包含两个数N ...