多进程记录加锁
来源:互联网 发布:数据分析相关分布 编辑:程序博客网 时间:2024/05/22 18:22
#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <fcntl.h>#include <string.h>#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)#define SEQFILE "seqno"#define MAXLINE 4096void my_lock(int fd);void my_unlock(int fd);int main(int argc, char** argv){ int fd; long i, seqno; pid_t pid; ssize_t n; char line[MAXLINE]; pid = getpid(); fd = open(SEQFILE, O_RDWR, FILE_MODE); for(i = 0; i < 20; i++) { my_lock(fd); lseek(fd, 0L, SEEK_SET); n = read(fd, line, MAXLINE); line[n] = '\0'; n = sscanf(line, "%ld\n", &seqno); printf("%s: pid = %ld, seq# = %ld\n", argv[0], (long)pid, seqno); seqno++; snprintf(line, sizeof(line), "%ld\n", seqno); lseek(fd, 0L, SEEK_SET); write(fd, line, strlen(line)); my_unlock(fd); } exit(0);}
加锁和解锁的两种实现:
#include <stdio.h>#include <unistd.h>void my_lock(int fd){ return;}void my_unlock(int fd){ return;}
#include <fcntl.h>#include <unistd.h>#include <stdio.h>void my_lock(int fd){ struct flock lock; lock.l_type = F_WRLCK; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len = 0; fcntl(fd, F_SETLKW, &lock);}void my_unlock(int fd){ struct flock lock; lock.l_type = F_UNLCK; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len = 0; fcntl(fd, F_SETLK, &lock);}
- 多进程记录加锁
- Python中给多进程文件加锁
- 进程间加锁(信号量)
- Python 多进程,进程加锁(RLock),进程执行乱序(进程同步)
- 多进程如何不加锁读写文件队列
- 多进程如何不加锁读写文件队列
- 进程购票加锁 python 笔记
- 扫描进程内存需要注意加锁
- 使用Zookeeper对进程间加锁
- 使用zookeeper对进程进行加锁
- 109-记录锁(尾部加锁)
- 加锁
- 加锁
- 加锁
- 加锁
- 加锁
- 加锁
- 加锁
- rh436 - Facing "Volume group for uuid not found" error while run lvcreate on shared storage
- Flask+uWSGI+Nginx部署过程
- hdu1422 重温世界杯
- OOAD-007
- Linq Union Vs Concat
- 多进程记录加锁
- 网际协议习题疑问
- 常用收藏2
- 用PPT制作圆形水晶按钮
- 导航网站,你在用吗?
- synchronized的作用
- NO1:在Windows端安装SecureCRT来连接Linux
- 向正在运行的Linux应用程序注入代码
- android下的文件权限