目录

  • 线程同步:
  • 锁的使用:
  • 使用matex(互斥量、互斥锁)一般步骤:
  • restrict关键字:
  • 死锁:
  • 读写锁:
  • 条件变量实现生产者-消费者代码
  • 信号量实现消费者生产者

线程同步:

协同步调,对公共区域数据按序访问。防止数据混乱,产生与时间有关的错误。

锁的使用:

建议锁!对公共数据进行保护。所有线程【应该】在访问公共数据前先拿锁再访间。但,锁本身不具备强制性。

使用matex(互斥量、互斥锁)一般步骤:

  1. pthread_matex_t lock;创建锁
  2. pthread_matex_init;初始化
  3. pthread_mmtex_1ock ;加锁
  4. 访问共享数据(stdout)
  5. pthrad_mutext_un1ock();解锁
  6. pthead_mautex_destroy;

销毁锁注意事项:

尽量保证锁的粒度,越小越好。(访问共享数据前,加锁。访问结束【立即】解锁。)
互斥锁,本质是结构体。我们可以看成整数。初值为1。(pthread_mutex_init()函数调用成      功。)
加锁:--操作,阻塞线程。
解锁:++操作,换醒阻塞在锁上的线程。
try锁:尝试加锁,成功--。失败,返回。同时设置错误号EBUSY

restrict关键字:

用来限定指针变量。被该关键字限定的指针变量所指向的内存操作,必须由本指针完成。

死锁:

是使用锁不恰当导致的现象;

  • 1.对一个锁反复lock。
  • 2.两个线程,各自持有一把锁,请求另一把。

读写锁:

锁只有一把。以读方式给数据加锁——读锁。以写方式给数据加锁———写锁。

读共享,写独占。

写锁优先级高。

相较于互斥量而言,当读线程多的时候,提高访问效率

pthread_rw1ock_t rwlock;
pthread_rwlock_init(&rwlock,NULL);
pthread_rwlock_rdlock(&rwlock);             try
pthread_rwlock_wrlock(&rwlock);             try
pthread_rwlock_unlock(&rwlock);
pthread_rwlock_destroy(&rwlock);

条件变量实现生产者-消费者代码

条件变量:

本身不是锁!但是通常结合锁来使用。matex

pthread_cond_t cond;

初始化条件变量:

  1. pthread_cond_init(&cond,NULL);动态初始化
  2. pthread_cond_t cond = PTHREAD_COND_INITIALIZER;静态初始化。

pthread_cond_signal():唤醒阻塞在条件变量上的(至少)一个至线程。

pthread_cond_broadcast():唤醒阻塞在条件变量上的所有线程

【要求,能够借助条件变量,完成生成者消费者】


信号量实现消费者生产者


Linux系统编程——锁相关推荐

  1. Linux系统编程——进程基础知识

    Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...

  2. linux线程并不真正并行,Linux系统编程学习札记(十二)线程1

    Linux系统编程学习笔记(十二)线程1 线程1: 线程和进程类似,但是线程之间能够共享更多的信息.一个进程中的所有线程可以共享进程文件描述符和内存. 有了多线程控制,我们可以把我们的程序设计成为在一 ...

  3. 【Linux】一步一步学Linux系统编程教程汇总(暂时暂停更新......)

    00. 目录 文章目录 00. 目录 01. 概述和标准 02. 文件操作 03. 进程概念 04. 进程间通信 05. 多线程 06. 信号 07. 同步与互斥 08. 高级IO 09. 其它 10 ...

  4. 【Linux系统编程】文件描述符的复制dup()和dup2()

    00. 目录 文章目录 00. 目录 01. 文件描述符复制概述 02. 常用函数 2.1 dup函数 2.2 dup2函数 03. 案例实战 3.1 dup示例 3.2 dup2示例 04. 附录 ...

  5. Linux系统编程(九)线程同步

    Linux系统编程(九)线程同步 一.什么是线程同步? 二.互斥量 三.条件变量 pthread_cond_wait函数 pthread_cond_signal函数 生产者和消费者模型 一.什么是线程 ...

  6. linux系统编程之文件与I/O(六):fcntl 函数与文件锁

    2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报  分类: linux系统编程(19)  版权声明:本文为博主原创文章,未经博主允许不得转载. 一.fcntl函数 功能:操纵文 ...

  7. Linux系统编程-信号入门2

    早,继续记录我的学习心得. 分享一个关于机械练习和有目的练习的看法. 机械的练习: 只是埋头干!我刚刚挥起球拍,努力去击球.我刚刚听到了那些数字,想办法去记住.我刚刚看到了那些数学题,正试着解答. 有 ...

  8. 【Linux | 系统编程】Linux系统编程(文件、进程线程、进程间通信)

    文章目录 Linux系统编程 文件IO open/close函数 read/write函数 文件描述符 阻塞.非阻塞 fcntl函数 lseek函数 传入传出参数 文件系统 文件存储 文件操作 sta ...

  9. Linux系统编程笔记

    文章目录 1.Linux系统编程 2.文件IO 2.1 文件描述符 2.2 open 2.3 perror 2.4 close 2.5 write 2.6 read 2.7 remove 2.8 系统 ...

最新文章

  1. 只用静态图像,就能实时渲染出丝滑3D效果 | CVPR 2021 Oral
  2. 三星samsung手机ROM制作教程-另外一篇
  3. mysql 账号权限过期_Mysql用户忘记密码及密码过期问题的处理方法
  4. iphone内存检测
  5. 【转】php和java之间rsa加密互通
  6. 老师,我们想看到您的笑容!
  7. 阿里敏捷教练:多团队开发一个产品的组织设计和思考
  8. 丹麦IQ145满分全部完美解谜(zz)
  9. 绝对不能错过!计算机视觉Polygon Mesh Processing读书笔记——4微分几何中的曲线
  10. 同步、异步事件循环(宏任务、微任务「大厂真题解析」)
  11. jquery 提交数据
  12. jspSmartUpload.jar包
  13. 《正确去掉Win7快捷方式小箭头》
  14. 开发产品的三个验证阶段
  15. 『淘宝十年技术路』读后想法
  16. spring的几种注入方式
  17. SpringBoot整合Druid ---- 猿来如此容易
  18. Tita 绩效管理:一对一正式面谈
  19. 下一清分日期是几年前_驾驶证清分日期是什么意思?清分日期包含当天吗
  20. 【Unity3D游戏开发学习笔记】(七)上帝之眼—第三人称摄像机的简单实现(跟随视角,自由视角)

热门文章

  1. 有人离职,工作交接不下去,咋整?
  2. python里小于号怎么打_如何在嵌入xml的python脚本中使用大于或小于符号?
  3. LeetCode之重新排列字符串(五千四百七十二)
  4. ROS rviz gazebo No transform from [left_leg] to [base_link]
  5. 手机拍的照片计算机内存不足怎么办,苹果手机照片太多,内存不够用怎么办?...
  6. 云计算原来是IT界工资最高的
  7. k近邻法: k-nearest neighbor
  8. python开发数据库_有没有利用python开发数据库的案例
  9. windows 2008 r2 NTP同步Internet时间配置
  10. Centos设置自带中文输入法