免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4499 | 回复: 13
打印 上一主题 下一主题

如何在linux系统内建立命名锁? [复制链接]

论坛徽章:
39
2017金鸡报晓
日期:2017-02-08 10:39:4219周年集字徽章-周
日期:2023-04-15 12:02:2715-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:27
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-15 13:42 |只看该作者 |倒序浏览
10可用积分
建立一个命名的mutex,如果有同名时建立失败。当程序退出时,自动被系统回收。

或者是其他的命名资源也可以,防止程序多次运行时用。

论坛徽章:
0
2 [报告]
发表于 2007-10-15 14:09 |只看该作者
fcntl实现的记录锁

论坛徽章:
39
2017金鸡报晓
日期:2017-02-08 10:39:4219周年集字徽章-周
日期:2023-04-15 12:02:2715-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:27
3 [报告]
发表于 2007-10-15 14:14 |只看该作者
不想要依赖文件的

论坛徽章:
0
4 [报告]
发表于 2007-10-15 14:25 |只看该作者
基于文件的比较常用吧,其他的,看看sem_open(3)之类应该可以。我怀疑这些东西如果你的代码不正常退出的话,用户可能比较难办,还是基于文件的fcntl做lock比较合适一点。

论坛徽章:
39
2017金鸡报晓
日期:2017-02-08 10:39:4219周年集字徽章-周
日期:2023-04-15 12:02:2715-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:27
5 [报告]
发表于 2007-10-15 17:53 |只看该作者
原帖由 bluster 于 2007-10-15 14:25 发表
基于文件的比较常用吧,其他的,看看sem_open(3)之类应该可以。我怀疑这些东西如果你的代码不正常退出的话,用户可能比较难办,还是基于文件的fcntl做lock比较合适一点。


刚做了实验,sem_open有一个缺陷,你不清理它就还在那,哪怕程序退出,这样的话程序异常退出就不好整了,不像windows系统,程序退出时系统会帮助做清理,这样就不担心异常退出问题了。有没有别的机制?

论坛徽章:
0
6 [报告]
发表于 2007-10-15 18:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
39
2017金鸡报晓
日期:2017-02-08 10:39:4219周年集字徽章-周
日期:2023-04-15 12:02:2715-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:27
7 [报告]
发表于 2007-10-15 18:29 |只看该作者

回复 #6 jamesr 的帖子

windows用了类似机制,最好找类似的,代码看的协调。

论坛徽章:
0
8 [报告]
发表于 2007-10-15 21:28 |只看该作者
原帖由 醉卧水云间 于 2007-10-15 17:53 发表


刚做了实验,sem_open有一个缺陷,你不清理它就还在那,哪怕程序退出,这样的话程序异常退出就不好整了,不像windows系统,程序退出时系统会帮助做清理,这样就不担心异常退出问题了。有没有别的机制?


既使程序异常退出,可以查询上次semop的pid. 然后判断其是否存在。
如果不用文件锁,建义用shared memory, 系统维护其attachment #, 程序异常退出,kernel为其减一。而且可以存储data, 包括mutex名map.

论坛徽章:
39
2017金鸡报晓
日期:2017-02-08 10:39:4219周年集字徽章-周
日期:2023-04-15 12:02:2715-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:27
9 [报告]
发表于 2007-10-15 21:44 |只看该作者
原帖由 Alligator27 于 2007-10-15 21:28 发表


既使程序异常退出,可以查询上次semop的pid. 然后判断其是否存在。
如果不用文件锁,建义用shared memory, 系统维护其attachment #, 程序异常退出,kernel为其减一。而且可以存储data, 包括mutex名map.


我想要的是一个核心中的命名变量,进程消失核心会帮助清理,WINDOWS下可以作到,但LINUX下还没找到。共享内存在创建者消失后自动消失吗?可能不会吧。不想查什么PID了,想找一个简单点的方法,文件锁我会用,这次只是想在核心中打个标记,由核心去清理,核心中真的没有一个易失的标记可用?

论坛徽章:
0
10 [报告]
发表于 2007-10-16 02:48 |只看该作者
需要互斥的进程如果有共同的父进程的话, 可以考虑mmap + MAP_ANONYMOUS的方式,
如果是不相干的进程, 也可以考虑share memory + atexit (clean) 的方式, 不过有违你的初衷

其他的方式可能不容易, posix提供给用户的接口没有类似功能, 系统5的ipc倒是不用文件, 但计数都是内核控制的, 不会因为程序的结束而有所改变

另外, 习惯上, 是哈希, 非哈稀, 稀着, 饭也.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP