码迷,mamicode.com
首页 > 系统相关 > 详细

Linux IPC 同步(三):记录锁

时间:2015-07-07 12:27:55      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

进程间的互斥,我们可以让这些进程共享某个内存区(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不一样.

 

Linux IPC 同步(三):记录锁

标签:

原文地址:http://www.cnblogs.com/xiaokuang/p/4619685.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!