Linux同步的实现初步学习

mac fswatch+rsync 实时同步远程文件 远程实时同步文件  linux  上有inotify+rsync,mac上可以用fswatch+rsync 首先mac上通过包管理器brew 安装fswatch brew install fswatch,没有brew的自行去安装brew 有可能下载不下来fswatch,因为brew默认访问的https,对于这种情况,可以先 brew --cache (没有装xcode的还是装下吧) 找到br 阅读详情

内核的同步方法:

Limux提供了一组相当完备的内核同步方法。这些方法使得内核开发者们能编写出高效而又自由竞争的代码。内容主要包括他们的接口,行为和用途。

       同步方法的基石是原子操作。他是其他同步方法的基础。原子操作保证指令以原子的方式执行。即执行过程不会被打断。原子操作也指的是不能够被分割的指令。

       内核提供了两组原子操作接口——一组针对整数进行操作,另一组针对单独的位进行操作。在Linux支持的所有体系结构上都实现了这两组接口。大多数体系结构会提供支持原子操作的简单算术指令。

原子整数操作:

       针对整数的原子操作只能针对atomic_t类型的数据进行处理。atomic_t类型确保编译器不对相应的值进行访问优化——这一点使得原子操作最终接收到正确的内存地址。在不同体系结构上实现原子操作的时候,使用atomic_t可以屏蔽期间的差异。

       Atomic_t类型定义在<linux/types.h>中。

       Typedefstruct

{

       Volatile int counter;

}atomic_t;

       Atomic_t在SPARC上只能将整数类型当做24位来用。

定义一个atomic_t类型变量:

       Atomic_tv;//定义一个v变量

       Atomic_tu = ATOMIC_INIT(0);

 

原子的操作

       Atomic_set(&v,4);

       Atomic_add(2,&v)

Atomic_inc(&v);

 

原子操作最常见的用途就是实现计数器。`

同样,在64位机上有64位的原子操作。

原子位操作

内核提供了一组针对位这一级数据进行操作的函数。他们是与体系结构相关的操作。

自旋锁

 

自旋锁的实现方法:

自旋锁的和体系结构密切相关,代码往往通过汇编实现,

基本的使用形式如下:

       DEFINE_SPINLOCK(mr_lock)

       Spin_lock(&mr_lock);

       Spin_unlock(&mr_lock);

自旋锁位多处理器机器提供了防止并发访问所需要的保护机制。在但处理机器上,变异的时候并不会加入自旋锁。他仅仅被当做一个设置内核抢占机制是否被开启的开关,如果禁止内核抢占,那么在编译时自旋锁就会被完全剔除。

自旋锁时不可递归的。

 

自旋锁可以使用在中断处理程序当中,此处不能使用信号量,因为信号量会导致睡眠。

 

读-写自旋锁

       有时候,锁的用途可以明确地分为读取和写入两个场景。任务列表就很符合这种场景。

信号量

       Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个不可用的信号量时,信号量将会将其推入一个等待队列,然后让其睡眠,这时候处理器能重获自由,从而去执行其他代码。当持有的信号量可用时,处于等待队列中的那个任务将被唤醒,并获得该信号量。

信号量的睡眠特性的一些结论

       由于争用信号量的进程在等待锁重新可用时会睡眠,所以信号领适用于锁会被长期争用的情况。

       锁被短期持有时,信号量就不太适用了,因为睡眠,维护等待列队以及唤醒所花费的开销可能比锁被占用的全部时间还长。

       由于执行线程在锁征用期时会睡眠,所以只能在进程上下文才能获取信号量锁。因为在中断上下文中时不能进行调度的。

       可以在持有信号量的时候去睡眠,其他试图获得信号量的进程不会因此而死锁。

       占用信号量的时候,不能占用自旋锁。等待信号量时可能会睡眠,而自旋锁不允许睡眠。

计数信号量和二值信号量

       计数信号量可以大于一,而二值信号量也叫做互斥信号量。信号量支持两个原子操作P()和V()操作。后来的系统吧两种操作分别叫做down() 和up()操作。

创建和初始化信号量

       信号量的实现是与体系结构相关的。可以通过以下方式静态的申明信号量——其中name是信号量变量名,count是信号量的使用数量。

       Struct semaphore name;

       Sema_init(&name,count);

       创建更为普通的互斥信号量可以使用以下的快捷方式。

       Static DECLEAR_MUTEX(name);

       更常见的情况是,信号量作为一个大数据结构一部分动态的创建。此时,只有指向该动态创建的信号量的间接指针。可以使用如下函数来对他进行初始化

       Sema_init(sem,count);

Sem是指针,count是信号量的使用者数量。

使用信号量

       函数down_interruptible()试图获取指定信号量,不可用则进程进入睡眠状态。

       使用down_trylock()函数,可以尝试以阻塞方式来获取指定的信号量。

要释放指定的信号量,需要调用up()函数。

互斥体

       为了找到一个更简单的睡眠锁,和你喝开发者们引入了互斥体。互斥体指的是任何可以睡眠的强制互斥锁。互斥体是一种互斥信号。

       静态定义mutex,可以这样做:

       DEFINE_MUTEX(name);

       初始化mutex,可以这样做

       Mutex_init(&mutex);

       对互斥锁锁定和解锁:

       Mutex_lock(&mutex);

       //临界区

       Mutex_unlock(&mutex);

这就是一个简化版的信号量。

Mutex(互斥体)使用的限制

       任何时刻只有一个任务可以持有mutex,也就是说,mutex的使用技术永远是1;

       给mutex上锁着也必须给其解锁。不可以在一个上下文中锁定一个mutex,而在另一个上下文当中给他解锁。这决定了mutex不适合内核同用户空间复杂的同步场景。经常在同一个人上下文当中上锁和解锁。

       递归的上锁和劫夺是不允许的。不能递归的持有用一个锁。同样也不能再去解锁一个已经解开的mutex

       当持有一个mutex时,进程不可以退出。

       Mutex不能再中断或者下半部中使用。

今天学习到这里,爱你YZ

 

       

用ADS2023手把手仿真SKYWORKS SMA1234变容二极管:从Datasheet到S参数结果全流程 本文详细介绍了如何使用ADS2023仿真SKYWORKS SMA1234变容二极管的全流程,从Datasheet参数解析到S参数结果验证。通过等效电路建模、关键公式编写和仿真设置,帮助工程师掌握变容二极管在射频电路设计中的应用技巧,提升仿真精度和工程实践能力。 阅读详情

相关推荐

MIC(Maximal Information Coefficient)最大互信息系数

MIC(Maximal Information Coefficient)最大互信息系数是一种用于衡量两个变量之间相关性的统计量。它扩展了传统的互信息(MI)和条件互信息(CMI)的概念,具有更广泛的应用范围。MIC能够捕获包括功能性和非功能性的广泛的关联,具有普遍性和公平性。普遍性意味着在足够的样本量下,MIC能够捕捉到广泛的相关关系,而不仅仅局限于特定的功能类型;公平性则意味着MIC对不同类型的包含同等噪声的关系给出了相似的分数。需要注意的是,虽然MIC具有很多优点,但它也有一些局限性。

qlkaicx的博客 4604

mac 本地文件与服务器Linux文件之间的相互传输

可以简单用scp 命令来实现 查看scp帮助:sup -h 输出信息如下:usage: scp [-12346BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]  [-l limit] [-o ssh_option] [-P port] [-S program][[user@]host1:]file1 … [[user@]

Jaguar的专栏 2万+

别再对着数据手册画图了!用HFSS 2023 R2快速复现ESP-01的PCB天线(附模型文件)

本文详细介绍了使用HFSS 2023 R2逆向复现ESP-01 PCB天线的五个关键步骤,包括逆向工程准备、高效建模技巧、材料与边界设置、激励与求解配置以及结果分析与设计验证。通过参数化建模和智能边界检测,大幅提升仿真效率,适用于WIFI和蓝牙设备的射频设计优化。

weixin_30832143的博客 76

mac linux rsync,mac[linux]使用lsyncd 实时同步两台机器的多个文件

Lsyncd是什么?Lsyncd是一种轻量级的实时文件备份解决方案,非常容易安装和使用。可以用来同步两天机器之间的文件。安装brew install lsyncdbrew install rsync配置文件~/MyApp/sync.luasettings {logfile = "/var/log/lsyncd.log", --日志路径statusFile = "/var/log/...

weixin_39619478的博客 432

[软考]系统架构设计师 备考经验分享(一) - 备考计划篇

前言 上周末刚刚结束了软考架构师的考试,自我感觉考的还可以,大概率是过了。 两次参加软考,一次中级嵌入式,一次高级架构师,都是备考不到两个月时间,尤其是架构师这次考试内容和本职工作有不小的差别,并且需要同时备考三个科目,在高强度地备考中感觉是摸索出到了一点软考的技巧与经验。 打算趁还记得,赶紧写几篇文章做下梳理总结,算是给将来自己考系分、高项或者其他考试做个记录,也希望能够帮到正在备考的大家。 先把第一步,个人的备考计划分享给大家。 自身情况分析 首先,请大家一定先明确三个问题,这三个问题会直接影响到你的

_ 6404

LTspice基础教程-009.LTspice波形测量

<<==上一篇:LTspice基础教程-008.LTspice PWL设置 >>==下一篇:LTspice基础教程-010. 首篇博客文末提供所有相关资源百度网盘分享链接

gaoyong_wang的博客 4万+

Mac 下实现rsync功能

win那边需要调用一个rsync.exe应用程序,然后有接口可以直接调用。Mac这边因为内核是Linux,所以系统自带rsync功能,在电脑的终端,直接敲入命令行即可实现。 开发中,需要使用NSTask调用shell指令。 NSTask调用shell指令详细内容请看链接:http://www.cnblogs.com/JanaChen/p/5883966.html 具体的rsync的shell

qq_28699375的博客 7533

保姆级教程:用CellOracle 0.10.13分析你的单细胞数据,从GRN构建到基因扰动模拟

本文详细介绍了如何使用CellOracle 0.10.13进行单细胞数据分析,从基因调控网络(GRN)构建到基因扰动模拟的全流程。通过环境配置、数据准备、GRN构建和扰动模拟等步骤,帮助研究者高效预测细胞命运决定的分子机制,特别针对实际分析中的易错点提供解决方案。

weixin_42525005的博客 437

Linux的初步学习(1)

2017年11月8日     对于linux目录结构 :  /bin与/sbin的区别/bin 存放可执行的二进制文件,而/sbin  是系                                        统管理员使用的可执行命令,一般用户只能查看,不能设置和使用。                                /:  是根目录

hunderdsun的博客 217

解决UNITE数据库注释高unassigned率:手把手教你训练专属真菌分类器(含预训练模型分享)

本文针对使用UNITE数据库进行真菌ITS序列注释时出现的高未分配率问题,提供了详细的实战解决方案。通过对比vsearch直接注释与Naive Bayes分类器的原理差异,文章手把手指导读者在QIIME 2环境中训练专属分类器,包括数据准备、模型训练、参数优化及效果验证,并分享了预训练模型,旨在显著提升真菌群落分析的注释准确性和数据利用率。

weixin_29214199的博客 338

复现CVE-2014-085(Apache ZooKeeper 未授权访问漏洞)

默认安装配置完的zookeeper允许未授权访问,管理员未配置访问控制列表(ACL)。导致攻击者可以在默认开放的2181端口下通过执行envi命令获得大量敏感信息(系统名称、java环境)导致任意用户可以在网络不受限的情况下进行未授权访问读取数据。

记录并分享学习安全的知识点.. 2174

Linux下用rsync实现文件同步

  rsync是linux下的一款快速增量备份工具Remote Sync,是一款实现远程同步功能的软件(数据镜像备份软件),它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。它不像FTP那样需要全备份,rsync可以根据数据的变化进行差异备份,从而减少数据流量,提高工作效率。   一、准备工作 假设有两台服务器: IP:114.22.168.67    -- 作为rs...

qq_37584445的博客 6073

【WRF-GHG 教程上】完整教程(2024年更新版)

完整教程(2024年更新版)

WW、forever的博客 1432

linux下实现进程同步

网上的大部分教程讲的都是线程同步,却很少有关于进程同步的博客,但其实线程同步与进程同步还是有些许差别的,故写此博客加以说明. 知识点 1.linux semaphore 头文件#include <semaphore.h> 编译注意事项:注意关联pthread, 即在编译命令之后加上-lthread 主要使用了linux的信号量及相应函数. int sem_init(sem_t *se...

xin凝的博客 5137

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

linux学习之磁盘同步

1、单向同步A->B 主机A,IP:192.168.0.135 [root@server35 ~]# yum install rsync -y [root@server35 ~]# yum install xinetd -y [root@server35 ~]# mkdir /opt/sersync [root@server35 ~]# vim /etc/rsyncd.conf uid

的专栏 2686

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

使用lsync实现linux上的文件实时同步

1.前言 1.1 概述 本文介绍了使用lsync实现linux 上的本地实时同步,本地定时同步的方法。 1.2 实验环境 服务器两台 操作系统: CentOS-7.4 软件: lsyncd-release-2.1.6 lua-5.1.4 cmake-2.8.12 本地同步环境信息: 源目录: /root/data/ 目的目录: /root/backup/ 远程同步环境信息: 源主机(即原始文件所在的服务器)的ip地址:10.40.239.234 源目录: /r...

international24的博客 1841

linux中如何实时同步时间,linux实现时间同步有哪几种方法

Linux实现时间同步的方法的有两种,分别是:1、使用ntpdate从时间服务器来更新时间,不需要自己做任何配置;2、使用ntp来搭建自己的时间服务器。【推荐课程:Linux系统】由于硬件的原因,机器或多或少的跟标准时间对不上,误差几秒到几分钟不等。对于服务器来说时间不准会有很多麻烦。例如支付的时候,无法下单,游戏无法登录等。接下来将在文章中为大家分享Linux系统中如何实现时间同步,希望对大家有...

weixin_33773996的博客 8511

Linux初步

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、linux初步学习二、环境搭建1.修改静态ip2.修改主机名3.配置IP和hostname的映射关系5.设置window的host文件三、关闭防火墙四、两台机器SSH免密登录在这里插入图片描述 前言 提示:这里可以添加本文要记录的大概内容: 提示:以下是本篇文章正文内容,下面案例可供参考 一、linux初步学习 为接下来hadoop的学习及环境搭建奠定基础。 二、环境搭建 1.修改静态ip [root@haney ha.

qq_47302320的博客 2088

初步学习Linux

Linux 是什么 vmware 虚拟机软件 Centos7 操作系统 (Linux 指的是操作系统内核) 操作系统 => 内核 + 一组配套的应用程序 (Linux实现 : Android,ubuntu,centos,redhat 发行版) Xshell 远程终端工具 Unix : 开源运动 (理查德 => gcc、emacs) 《unix环境高级编程》 《unix...

xiaoming1999的博客 212

【基于Rsync实现Linux To Windows文件同步】

基于Rsync实现Linux(server)to Windows(client)的文件同步教程

of chen的博客 5425

Linux 信号量实现同步,实现互斥

一.实现同步 同步模板 使用信号量实现同步时,需要将信号量的初值设置为0 semaphore s=0; p1() { p(s); 具体的代码 } p2() { 具体的代码 v(s); } 1.假设p1先执行,执行到p(s), s-=1, 此时s=-1<0,进程阻塞,主动放弃cpu使用权,cpu调度执行p2,执行p2的具体任务,然后进行v(s),,s+=1,s=0,p2执行完毕。cpu调度继续执行p1,此时s=0,p1被唤醒,因此就达到了先执行p2后执行p1的同步关系。 2.假设p2先执行

乐行僧的博客 763

Linux下线程间同步实现方式详解

Linux 中线程(Thread)是共享进程内存空间的轻量级执行单元,线程间通信(IPC)主要通过共享内存和同步机制实现。在Linux操作系统中,线程间实现同步通信的方式主要包括互斥锁(Mutex)、条件变量(Condition Variable)、信号量(Semaphore)、读写锁(Read-Write Lock)等。

SEU123WW的博客 1403

Linux下Rsync+sersync实现数据实时同步

本教程实现的是Linux服务器之间自动同步文件或目录的功能,网上有很多这方面的教程,本人亲自实践后,总结如下. 网络上关于Linux自动同步的实现方式大体有两种途径 (1)Rsync+inotify-tools (2)Rsync+sersync Rsync  Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所

chrisjingu的专栏 5411

Linux学习--rsync同步备份实现

事先的准备,2台Redhat 6.3虚拟机,主机名和IP地址如下: mylinux     192.168.198.100   rsync服务器端 mylinux2   192.168.198.101   rsync客户端 一、rsync服务端配置 以mylinux为例,查看一下虚拟机的信息,这里看到rsync是已经安装好了的,版本为3.0.6. 在mylinux上编辑r

挨踢小二郎 764

linux 同步 多终端,Linux系统如何实现不同终端间的同步

有网友问我Linux系统能实现不同终端间的同步吗?当然是可以的,下面华军小编就给大家介绍下Linux不同终端间同步的方法。安装必须软件#yum install tcl expect(1)确认当前所在终端号:[root@localhost shell]# w17:59:31 up 9:47, 5 users, load average: 0.06, 0.02, 0.00USER TTY FROM L...

weixin_39892800的博客 340

Linux学习之时间同步

Linux学习之时间同步时间同步介绍简介NTP简介配置chrony简介配置 时间同步介绍 简介 百度百科:时间同步就是通过对本地时钟的某些操作,达到为分布式系统提供一个统一时间标度的过程。在集中式系统中,由于所有进程或者模块都可以从系统唯一的全局时钟中获取时间,因此系统内任何两个事件都有着明确的先后关系。而在分布式系统中,由于物理上的分散性,系统无法为彼此间相互独立的模块提供一个统一的全局时钟,而由各个进程或模块各自维护它们的本地时钟。由于这些本地时钟的计时速率、运行环境存在不一致性,因此即使所有本地时钟在

才玖 422
上一篇: make menuconfig时出现 #include CURSES_LOC错误
下一篇: 设备驱动的简单理解
maclinuxye
博客等级 码龄11年 10粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值