(缓存行对齐、数据局部性、缓存预取、自旋锁与读写锁) 1:27:33 【C/C++、Linux服务器底层原理】Linux内核CPU负载计算方法(使用命令行工具、使用/proc文件系统、使用编程接口) 1:15:55 【C/C++、Linux服务器底层原理】Linux内核实现进程调度算法、CFS使用红黑树数据结构来维护进程队列 1:16:41 【C/C++、Linux...
那接下来,针对不同的应用场景,谈一谈互斥锁、自旋锁、读写锁、乐观锁、悲观锁的选择和使用。 一、互斥锁与自旋锁详解 最底层的两种就是会「互斥锁和自旋锁」,有很多高级的锁都是基于它们实现的,你可以认为它们是各种锁的地基,所以我们必须清楚它俩之间的区别和应用。 加锁的目的就是保证共享资源在任意时间里,...
读写锁(readers-writer lock),又称为多读单写锁(multi-reader single-writer lock,或者MRSW lock),共享互斥锁(shared-exclusive lock),以下简称RW lock。 读写锁用来解决读写操作并发的问题。多个线程可以并行读取数据,但只能独占式地写或修改数据。 write-mode和read-mode RW lock有两种模式:write-mode,read-m...
r:打开并赋予读权限,没有文件时返回NULL指针标示错误,errorno设为“can't find file”对应的错误码。 再来看w+和r+: 都赋予文件读写权限,读写指针均从文件开头开始.区别就是当找不到文件时是否创建文件. 再来详细看看a和a+: 以a打开的文件,开始写时读写指针在文件尾,但是这个指针是不能进行读操作的,会返...
1. 悲观锁 VS 乐观锁 2. 读写锁 vs 普通的互斥锁 3. 重量级锁 vs 轻量级锁 4. 挂起等待锁 vs 自旋锁 小结 5. 公平锁 VS 非公平锁 6. 可重入锁 和 不可重入锁 synchronized 与 锁策略的对应关系 二、相关面试题 1. 你是怎么理解乐观锁和悲观锁的,具体怎么实现呢?
1、以读者为主体:一个“读者”想要访问资源时,首先给资源加上“读锁”(共享锁),如果加锁成功,方可访问该资源。 2、以写者为主体:一个“写者”想要访问资源的时候,必须先给资源加上”写锁“(排他锁),加锁成功,才可以访问这个资源。 3、以资源作为体:如果一个写锁(排他锁)被加在这个资源上,那么任何其他...
【C/C++、Linux服务器底层原理】Linux内核CPU缓存技术(缓存行对齐、数据局部性、缓存预取、自旋锁与读写锁) 01:27:33 【C/C++、Linux服务器底层原理】Linux内核CPU负载计算方法(使用命令行工具、使用/proc文件系统、使用编程接口) 01:15:55 【C/C++、Linux服务器底层原理】Linux内核实现进程调度算法、CFS使用红...
互斥锁(Mutexes):通过 futex,可以实现互斥锁来保护共享资源,确保一次只有一个线程可以访问资源。 读写锁(Read-Write Locks):futex 也可以用来实现读写锁,允许多个读者同时访问资源,但写者访问时需要独占。 条件变量(Condition Variables):futex 可以用来实现条件变量,允许线程在特定条件不满足时等待,并在条件可能已经变...
2、线程同步的方式:互斥锁、自旋锁、读写锁、条件变量3、互斥锁与自旋锁的底层区别4、孤儿进程与僵尸进程5、死锁及避免6、多线程与多进程比较7、进程间通信:PIPE、FIFO、消息队列、信号量、共享内存、socket8、管道与消息队列对比9、fork进程的底层:读时共享,写时复制10、线程上下文切换的流程11、进程上下文切换的...
现在Win32的API,用C++实现自己的读写锁。这组API包括:CreateMutex,CreateEvent,WaitForSingleObject,WaitForMultipleObjects,ResetEvent,ReleaseMutex,SetEvent,CloseHandle。以下代码在VS2005下,已经编译通过。 RWLockImpl.h 01.#ifndef _RWLockImpl_Header 02.#define _RWLockImpl_Header 03. 04.#include 05.#include 06....