首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux】线程同步

线程同步 一、条件变量 1. 同步概念 同步问题是保证数据安全的情况下,让线程访问资源具有一定的顺序性,从而有效避免饥饿问题,叫做同步。 2....也就是同步的解决方案是什么呢?这个解决方案在 Linux 中称为条件变量。 什么叫做条件变量呢?...现在我们就模拟这个场景,对显示器这个共享资源加锁,并添加条件变量实现同步。...它们的作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但 POSIX 可以用于线程间同步。 我们一句话总结以前学的信号量,信号量是一个保证 PV 操作的原子性的一把计数器。...例如使用第二种方法判空还是满: (2)原理 但是我们现在有信号量这个计数器,就很简单的进行多线程间的同步过程,就不需要进行判空还是判满了。

9510

linux Page cache和buffer cache正解

Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。...当page cache的数据需要刷新时,page cache中的数据交给buffer cache,但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。...简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。...这个page的数量将会在top程序的buffer一栏中显示。...从上面的分析可以看出,2.6内核中的buffer cache和page cache在处理上是保持一致的,但是存在概念上的差别,page cache针对文件的cache,buffer是针对磁盘块数据的cache

2.9K20

Linux 同步管理

本篇介绍 本篇看下Linux如何实现线程安全问题 原子操作 对于基础类型操作,使用原子变量就可以做到线程安全,那原子操作是如何保证线程安全的呢?...linux中的原子变量如下: typedef struct { int counter; } atomic_t; #define ATOMIC_INIT(i) { (i) } #ifdef...内存屏障 ARM架构终有3类内存屏障指令: 数据存储屏障(data memory barrier, DMB) 数据同步屏障(data synchronization barrier, DSB) 指令同步屏障...(instruction synchronization barrier, ISB) linux 内核中的内存屏障函数如下: barrier() 编译优化屏障,阻止编译器为了性能优化而进行指令重排 mb...linux中也有对应的方法, 就是持有自旋锁的时候关闭中断,等操作完后再开启,对应的api如下: spin_lock_irqsave(spinlock_t *lock, unsigned long flags

1.6K40

深入理解LinuxPage Cache

Page Cache 1.1 Page Cache 是什么? 为了理解 Page Cache,我们不妨先看一下 Linux 的文件 I/O 系统,如下图所示: Figure1....Linux 文件 I/O 系统 上图中,红色部分为 Page Cache。可见 Page Cache 的本质是由 Linux 内核管理的内存区域。...在 Linux 2.4 版本的内核之前,Page Cache 与 buffer cache 是完全分离的。...Page Cache 与文件持久化的一致性&可靠性 现代 LinuxPage Cache 正如其名,是对磁盘上 page(页)的内存缓存,同时可以用于读/写操作。...),周期性地同步文件系统中文件脏数据块,这是默认的 Linux 一致性方案; 上述两种方式最终都依赖于系统调用,主要分为如下三种系统调用: 方法 含义 fsync(intfd) fsync(fd):将

3.2K30

linux那些事之页迁移(page migratiom)

如果是normal page则调用unmap_and_move处理类似同样 接触旧page所有进程映射,申请新page同步page内存以及迁移页表。...new_page_t get_new_page:申请新page 钩子函数。 free_page_t put_new_page:释放page钩子函数。...MIGRATE_SYNC_LIGHT //轻度同步迁移,允许大部分的阻塞操作,唯独不允许脏页的回写操作。...MIGRATE_SYNC //同步迁移,迁移过程会发生阻塞,若需要迁移的某个page正在writeback或被locked会等待它完成 MIGRATE_SYNC_NO_COPY //同步迁移,但不等待页面的拷贝过程...内核migrate_pages处理相对来说比较复杂,内核文档(Page migration — The Linux Kernel documentation)中给出了 迁移过程说明: migrate_pages

42640

深入理解Linux VFS和Page Cache

编者注:在分析完 Linux inode 基础概念 之后,让我们看下inode在内存中对应的文件系统抽象VFS,然后分析下关于 磁盘操作 中Page Cache的回写策略。...此外,还要确保在page cache中的数据更改时能够被同步到磁盘上,后者被称为page回写(page writeback)。...当内核发起一个写请求时(例如进程发起write()请求),同样是直接往cache中写入,此时不会立即同步到磁盘,而是将写入的page设置为脏页,并将其加入dirty list中,内核会负责定期同步到磁盘保持二者一执行...page cache另一个主要工作是回收page释放内存空间,此时会选择合适的page进行释放,如果是脏页会先同步到磁盘然后释放。此时是如何选择cache页的呢?...,可以调用msync()来强制同步, 这样所写的内容就能立即保存到文件里了。

2.9K21

Linux NTP时钟同步

所以时钟同步在大数据里被广泛应用且必不可少的一步。 二、了解时间 在Linux系统中,时间分为两部分:系统时间和硬件时间。默认情况下,系统时间和硬件时间会以异步的方式进行,互不干扰。...三、了解时区 在Linux系统中, /usr/share/zoneinfo目录下存在很多时区,其中 Asia/Shanghai代表中国时区,如果需要更改时区,仅需做个软链接到 /etc目录,软链名字为...对于运行NTP的本地系统,既可以接收来自其他时钟源的同步,又可以作为时钟源同步其他的时钟,并且可以和其他设备互相同步。...五、NTP时间同步方案选择 NTP同步方式在linux下一般两种:使用ntpdate命令直接同步和使用NTPD服务平滑同步。有什么区别呢,简单说下,免得时间长了,概念又模糊。...,所以一般开启ntpd服务同步前先用ntpdate先手动同步一次)。

19.3K30

深入Linux并发同步

Linux也提供了这样的原子操作,如对整数加一操作的 atomic_inc(): static __inline__ void atomic_inc(atomic_t *v) { __asm__ __...在Linux内核中,比较常用的锁有:自旋锁、信号量、读写锁 等,下面介绍一下自旋锁和信号量的实现。 自旋锁 自旋锁 只能在多核CPU系统中,其核心原理是 原子操作,原理如下图: ?...由于Linux的自旋锁使用汇编实现,所以比较苦涩难懂,这里使用C语言来模拟一下: void spin_lock(amtoic_t *lock) { again: result = --(*lock...在Linux内核中,信号量使用 struct semaphore 表示,定义如下: struct semaphore { raw_spinlock_t lock; unsigned...int count; struct list_head wait_list; }; 各个字段的作用如下: lock:自旋锁,用于对多核CPU平台进行同步

1.5K31

Linux并发与同步

Linux进程基础中提到,Linux以进程为单位组织操作,Linux中的线程也都基于进程。尽管实现方式有异于其它的UNIX系统,但Linux的多线程在逻辑和使用上与真正的多线程并没有差别。...在Linux从程序到进程中,我们看到了一个程序在内存中的表示。这个程序的整个运行过程中,只有一个控制权的存在。...如果多个任务可以共享资源,特别是同时写入某个变量的时候,就需要解决同步的问题。比如说,我们有一个多线程火车售票系统,用全局变量i存储剩余的票数。...多线程同步 对于多线程程序来说,同步(synchronization)是指在一定的时间内只允许某一个线程访问某个资源 。而在此时间内,不允许其它的线程访问该资源。...我们可以通过互斥锁(mutex),条件变量(condition variable)和读写锁(reader-writer lock)来同步资源。

2K90
领券