利用资源API和实例同步多线编程
来源:http://www.tudoupe.com时间:2021-12-05
目录
- 1个书写基本原理和典型困难
- 一.1 主线终止。
- 1.2 螺线撞车,导致流程退出?
- 2 线程的基本操作
- 2.1 创建线程
- 二.2. 获取线索识别码
- 2.1 等待线索得出结论
- 4 矫形可变原子操作
- Linux 中的 5 行同步对象
- 5.1 对等林努
- 五. 两个Linux系统五号信号
- 5.3 Linux情况变量
- 5.4 Linux读写锁
- Windows 中的 6 串列同步对象
- 线索同步化 物体 7 C+11/14/17
- 8 经验总结
- 8.1. 减少使用的锁数
- 八.2 锁的粒子大小缩小了
- 9 线程局部存储
- 10 环队列和 IMO 多重xing 代码示例
导言:多线编程一直是服务器编程的重点,在前一次访谈的后端开发中,还有几个多线编程问题,换句话说,必须记录下来,本文主要列出操作系统的原始内容。Linux api,C++11/14/17和Windows相关api
这里没什么可说的,当然,见C++API参考。
这个职位旨在审查我的知识以及知识的进步,过去曾发表过太多的线性方案拟订文章:C/C++多线方案拟订专栏,用于应付一波潮流。
GitHub 多线阅读文件的示例代码仓库: GitHub 代码仓库
这就是IO多重电路发挥作用的地方。select模型,epoll
在 ET 模式下的 Poll 的无保留服务端实例 。
希望我们都能够满足我们的需求,努力向前迈进,共同发展,创造伟大,获得我们的愿望,保护我们拥有的东西。
1个书写基本原理和典型困难
一.1 主线终止。
在Windows当一个过程包含数条线索时,如果主线索执行结束,所需的代码(工作线索)没有及时执行,将撤回。
在Linux如果主线完成,工作线通常不受影响,并且继续运行,但这一过程随后是为僵尸过程设计的(应当避免的)。
1.2 螺线撞车,导致流程退出?
有可能
2 线程的基本操作
2.1 创建线程
Linux 中的线索生成
二.2. 获取线索识别码
2.1 等待线索得出结论
在实际项目开发中,我们常常需要一条线等待另一条线完成这项工作。
pthread_join等待线索的终止并获得其返回值
4 矫形可变原子操作
线索同步技术, 允许多个线条同时访问同一资源 。
Linux 中的 5 行同步对象
5.1 对等林努
通过防止几条线索同时执行代码的同一部分来保护资源。
创建一个互斥体
初始化一个互斥体
销毁一个互斥体
遇有易燃锁定和拆锁操作的情况
对于pthread_mutexattr_t,如下
设置和获取属性类型
属性类型
PTHREAD_MUTEX_NORMAL正常锁。 当线索锁定在正态锁上时, 对象的默认属性会被其他线索堵塞 。pthread_mutex_lock在对方的圈子解开锁之前 很有帮助PTHREAD_MUTEX_ERRORCHECK如果使用线索, 将会有一个错误锁定 。pthread_mutex_lock如果一个物体被锁定,它就会再次被锁定。pthread_mutex_lock会返回EDEADLKPTHREAD_MUTEX_RECURSIVE:再次锁定。此属性允许相同的线条重现,并按每个成功调用锁定它所拥有的折射。pthread_mutex_lock当对象的密钥引用数增长时 。1,相反,每成功调用pthread_mutex_unlock锁定计数随后将减少。1
五. 两个Linux系统五号信号
5.3 Linux情况变量
条件变数创造和消灭
等待条件变量唤醒
因调用pthread_cond_wait必须等待的线索是:API唤醒
5.4 Linux读写锁
读写锁定应用程序 : 在许多情况下, 线索只读取共享变量的值, 只在少数情况下读取共享变量的值 。 在这样的情况下, 不需要同步请求, 并且它们之间的同步访问是安全的 。
读写锁的应用方法
声明一个读写锁
三个读锁的系统API接口
三个写锁的系统API接口
- 读写锁的属性
pref枚举类型
初始化属性
Windows 中的 6 串列同步对象
不做概述
线索同步化 物体 7 C+11/14/17
在C/C++通过直接使用操作系统使许多资源同步化API限制极少,但很难使用,同一守则不相容。Windows和Linux两个平台
| 互斥量 | 作用 |
|---|---|
mutex |
基本的互斥量 |
timed_mutex |
有超时机制的互斥量 |
recursive_mutex |
可重入的互斥量 |
recursive_timed_mutex |
结合timed_mutex和recursive_mutex特点的互斥量 |
shared_timed_mutex |
共享暴露的超时系统 |
shared_mutex |
共享的互斥量 |
为了避免死锁,C++有四个同侪管制系统可供使用。
| 互斥量管理 | 作用 |
|---|---|
lock_guard |
基于影响领域的反应管理 |
unique_lock |
同伴管理更适应性强 |
shared_lock |
共享的互斥量管理 |
scoped_lock |
为了避免彼此被关起来, 使用反应管理。 |
折射的生命周期必须与管理折射的功能的生命周期相吻合。
8 经验总结
8.1. 减少使用的锁数
锁定代码经常遭受以下性能损失:
- 锁着和锁着 都要付出代价
- 关键地区代码不能同时执行。
- 上下文切换过多
八.2 锁的粒子大小缩小了
锁定尺寸的减少是指一个关键区域代码范围,可以减少锁定的影响;关键区域的代码范围越窄,进入关键区域的线性队列的可能性就越小。
原代码
第4/5/8行不必有关键区域代码,建议离开敏感区域。
9 线程局部存储
这些数据有时是必要的,以便每一线条在一个有许多线条的进程中独立运作。C++每个示例对象都有其自身的属性, 称为线索本地存储 (TLS) 。
10 环队列和 IMO 多重xing 代码示例
我将密码上传到GitHub, 我可以从我的个人仓库里拿到它; 链接在介绍的底部。
在此情况下使用环形队列。
它是对文件内容的多线读取 。C代码,我设置时间为sleep(1)如果您想快速阅读, 可以取消 。test.c中的这一行注释
运行效果

相关新闻
- 2023-04-16 2台电脑怎么共享(2台电脑怎么共享
- 2023-04-16 主板检测卡代码(电脑主板检测卡代
- 2023-04-16 dnf未响应(dnf未响应老是上不去)
- 2023-04-16 ppoe(pppoe拨号上网)
- 2023-04-16 网速不稳定(网速不稳定是路由器的
- 2023-04-16 wds状态(Wds状态成功)
- 2023-04-16 光标键(光标键不动了怎么办)
- 2023-04-16 电脑提速(电脑提速100倍的方法)
- 2023-04-16 切换用户(切换用户怎么切换回来
- 2023-04-16 数据包是什么(产品数据包是什么
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
