当前位置:网站首页 > 技术博客 > 正文

分段锁的实现原理




在这里插入图片描述


1、文件锁包含劝告式锁强制式锁
劝告式锁:要求每个使用上锁文件的进程都要检查是否有锁存在,并且尊重已有的锁。在一般情况下,内核和系统都不使用建议性锁,它们依靠程序员遵守这个规定。
强制式锁:是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操作。采用强制性锁对性能的影响很大,每次读写操作都必须检查是否有锁存在。

2、使用文件锁的操作函数有flock()和fcntl()
flock():对整个文件。其中包含共享锁和互斥锁
fcntl():对文件区域或整个文件。其中包含读锁(共享锁)和写锁(互斥锁)

本文使用的内容全为劝告式锁。


头文件:#include <sys/file.h>

 

表1:

是否满足请求是否满足请求当前加上的锁共享锁互斥锁无是是共享锁是否互斥锁否否

头文件:
#include <unistd.h>
#include <fcntl.h>

 

读锁可一直加,写锁只能有一个,其他会进入阻塞。效果同表1

写锁是互斥写。

下面的实例是文件写入锁的测试用例,文件名为,wirte_lock.c 。
这里首先创建了一个hello 文件,之后对其上写入锁,最后释放写入锁,代码如下所示

 

开启两个终端,并且在两个终端上同时运行该程序,以达到多个进程操作一个文件的效果。首先在终端1运行,然后在终端2上运行,注意终端二中的第一行输出。
在这里插入图片描述

读锁是共享读。

接下来的程序是文件读取锁的测试用例,原理和上面的程序一样。只把main函数改成一下内容。文件名为read_lock.c。

 

在这里插入图片描述
源码:https://blog.csdn.net/rl/article/details/

线程的互斥锁和条件变量

信号量(无名和有名)

待记录


  • 上一篇: tinyxml gettext
  • 下一篇: 备忘录设计图
  • 版权声明


    相关文章:

  • tinyxml gettext2025-03-31 16:01:03
  • matlab的fread2025-03-31 16:01:03
  • vue3与vue2.5区别大吗2025-03-31 16:01:03
  • stm32if语句2025-03-31 16:01:03
  • unittest框架原理2025-03-31 16:01:03
  • 备忘录设计图2025-03-31 16:01:03
  • 驼峰命名法属于基本的命名规范2025-03-31 16:01:03
  • mipi dsi接口定义2025-03-31 16:01:03
  • redisson集群模式2025-03-31 16:01:03
  • ktv终于有人分享完整版了2025-03-31 16:01:03