Linux系统编程——锁
目录
- 线程同步:
- 锁的使用:
- 使用matex(互斥量、互斥锁)一般步骤:
- restrict关键字:
- 死锁:
- 读写锁:
- 条件变量实现生产者-消费者代码
- 信号量实现消费者生产者
线程同步:
协同步调,对公共区域数据按序访问。防止数据混乱,产生与时间有关的错误。
锁的使用:
建议锁!对公共数据进行保护。所有线程【应该】在访问公共数据前先拿锁再访间。但,锁本身不具备强制性。
使用matex(互斥量、互斥锁)一般步骤:
- pthread_matex_t lock;创建锁
- pthread_matex_init;初始化
- pthread_mmtex_1ock ;加锁
- 访问共享数据(stdout)
- pthrad_mutext_un1ock();解锁
- 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;
初始化条件变量:
- pthread_cond_init(&cond,NULL);动态初始化
- pthread_cond_t cond = PTHREAD_COND_INITIALIZER;静态初始化。
pthread_cond_signal():唤醒阻塞在条件变量上的(至少)一个至线程。
pthread_cond_broadcast():唤醒阻塞在条件变量上的所有线程
【要求,能够借助条件变量,完成生成者消费者】
信号量实现消费者生产者
Linux系统编程——锁相关推荐
- Linux系统编程——进程基础知识
Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...
- linux线程并不真正并行,Linux系统编程学习札记(十二)线程1
Linux系统编程学习笔记(十二)线程1 线程1: 线程和进程类似,但是线程之间能够共享更多的信息.一个进程中的所有线程可以共享进程文件描述符和内存. 有了多线程控制,我们可以把我们的程序设计成为在一 ...
- 【Linux】一步一步学Linux系统编程教程汇总(暂时暂停更新......)
00. 目录 文章目录 00. 目录 01. 概述和标准 02. 文件操作 03. 进程概念 04. 进程间通信 05. 多线程 06. 信号 07. 同步与互斥 08. 高级IO 09. 其它 10 ...
- 【Linux系统编程】文件描述符的复制dup()和dup2()
00. 目录 文章目录 00. 目录 01. 文件描述符复制概述 02. 常用函数 2.1 dup函数 2.2 dup2函数 03. 案例实战 3.1 dup示例 3.2 dup2示例 04. 附录 ...
- Linux系统编程(九)线程同步
Linux系统编程(九)线程同步 一.什么是线程同步? 二.互斥量 三.条件变量 pthread_cond_wait函数 pthread_cond_signal函数 生产者和消费者模型 一.什么是线程 ...
- linux系统编程之文件与I/O(六):fcntl 函数与文件锁
2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报 分类: linux系统编程(19) 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.fcntl函数 功能:操纵文 ...
- Linux系统编程-信号入门2
早,继续记录我的学习心得. 分享一个关于机械练习和有目的练习的看法. 机械的练习: 只是埋头干!我刚刚挥起球拍,努力去击球.我刚刚听到了那些数字,想办法去记住.我刚刚看到了那些数学题,正试着解答. 有 ...
- 【Linux | 系统编程】Linux系统编程(文件、进程线程、进程间通信)
文章目录 Linux系统编程 文件IO open/close函数 read/write函数 文件描述符 阻塞.非阻塞 fcntl函数 lseek函数 传入传出参数 文件系统 文件存储 文件操作 sta ...
- 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 系统 ...
最新文章
- 只用静态图像,就能实时渲染出丝滑3D效果 | CVPR 2021 Oral
- 三星samsung手机ROM制作教程-另外一篇
- mysql 账号权限过期_Mysql用户忘记密码及密码过期问题的处理方法
- iphone内存检测
- 【转】php和java之间rsa加密互通
- 老师,我们想看到您的笑容!
- 阿里敏捷教练:多团队开发一个产品的组织设计和思考
- 丹麦IQ145满分全部完美解谜(zz)
- 绝对不能错过!计算机视觉Polygon Mesh Processing读书笔记——4微分几何中的曲线
- 同步、异步事件循环(宏任务、微任务「大厂真题解析」)
- jquery 提交数据
- jspSmartUpload.jar包
- 《正确去掉Win7快捷方式小箭头》
- 开发产品的三个验证阶段
- 『淘宝十年技术路』读后想法
- spring的几种注入方式
- SpringBoot整合Druid ---- 猿来如此容易
- Tita 绩效管理:一对一正式面谈
- 下一清分日期是几年前_驾驶证清分日期是什么意思?清分日期包含当天吗
- 【Unity3D游戏开发学习笔记】(七)上帝之眼—第三人称摄像机的简单实现(跟随视角,自由视角)
热门文章
- 有人离职,工作交接不下去,咋整?
- python里小于号怎么打_如何在嵌入xml的python脚本中使用大于或小于符号?
- LeetCode之重新排列字符串(五千四百七十二)
- ROS rviz gazebo No transform from [left_leg] to [base_link]
- 手机拍的照片计算机内存不足怎么办,苹果手机照片太多,内存不够用怎么办?...
- 云计算原来是IT界工资最高的
- k近邻法: k-nearest neighbor
- python开发数据库_有没有利用python开发数据库的案例
- windows 2008 r2 NTP同步Internet时间配置
- Centos设置自带中文输入法