zoukankan      html  css  js  c++  java
  • Linux IPC 同步(三):记录锁

    进程间的互斥,我们可以让这些进程共享某个内存区(mmap实现),然后在该共享内存区中使用某种类型的同步变量

    但是,fcntl记录上锁往往更容易使用。

    #include <unistd.h>
    #include <fcntl.h>
    int fcntl(int fd, int cmd, ... /* struct flock *arg */ );
    
    struct flock {
          ...
          short l_type;    /* Type of lock: F_RDLCK, F_WRLCK, F_UNLCK */
          short l_whence;  /* How to interpret l_start: SEEK_SET, SEEK_CUR, SEEK_END */
          off_t l_start;   /* Starting offset for lock */
          off_t l_len;     /* Number of bytes to lock */
          pid_t l_pid;     /* PID of process blocking our lock (F_GETLK only) */
          ...
    };

     cmd的参数取值如下:

    注:1. 记录上锁函数不应该同标准I/O库函数一起函数,因为这些库函数使用了内部缓冲。当对某个文件进行记录锁操作时,应配合使用read,write等系统调用

         2. 文件锁不能通过fork由子进程继承. 对于一个打开某个文件的给定进程来说, 当它关闭该文件所有的描述符或者它本身终止时, 与该文件的所有锁都被删除. 删除锁时关键的是进程ID(strcut flock中的l_pid字段)。既然锁和进程ID紧密相关联, 锁不能通过fork来继承也就顺理成章,因为父子进程的ID不一样.

  • 相关阅读:
    [BZOJ 1698] 荷叶池塘
    [BZOJ 3132] 上帝造题的七分钟
    [JLOI2011] 飞行路线
    [Codeforces Round49F] Session in BSU
    [BZOJ 3036] 绿豆蛙的归宿
    CRC-16校验原理
    ubuntu下mysql的安装与配置
    【OpenCV】边缘检测:Sobel、拉普拉斯算子
    我对sobel算子的理解
    梯度算子(普通的+Robert + sobel + Laplace)
  • 原文地址:https://www.cnblogs.com/xiaokuang/p/4619685.html
Copyright © 2011-2022 走看看