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不一样.

  • 相关阅读:
    GPU
    Windows系统之hosts文件
    条形码定位算法
    entity framework extended library , bulk execute,deleting and updating ,opensource
    sharepoint 2013 sp1
    windows azure programing
    windows azure tools for mac
    online web design tool
    toastr
    sharepoint online
  • 原文地址:https://www.cnblogs.com/xiaokuang/p/4619685.html
Copyright © 2011-2022 走看看