免费注册 查看新帖 |

Chinaunix

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

GET_LOCK(str,timeout) 干什么用? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-16 09:53 |只看该作者 |倒序浏览
这是mysql手册的一段话
谁给讲讲这个函数到底有什么具体的应用啊

GET_LOCK(str,timeout)
设法使用字符串str 给定的名字得到一个锁, 超时为timeout 秒。若成功得到锁,则返回 1,若操作超时则返回0  (例如,由于另一个客户端已提前封锁了这个名字 ),若发生错误则返回NULL (诸如缺乏记忆或线程mysqladmin kill 被断开 )。假如你有一个用GET_LOCK()得到的锁,当你执行RELEASE_LOCK()或你的连接断开(正常或非正常)时,这个锁就会解除。

这个函数可用于执行应用程序锁或模拟记录锁定。名称被锁定在服务器范围内。假如一个名字已经被一个客户端封锁, GET_LOCK() 会封锁来自另一个客户端申请封锁同一个名字的任何请求。这使对一个封锁名达成协议的客户端使用这个名字合作执行建议锁。然而要知道它也允许不在一组合作客户端中的一个客户端封锁名字,不论是服役的还是非故意的,这样阻止任何合作中的客户端封锁这个名字。一个减少这种情况发生的办法就是使用数据库特定的或应用程序特定的封锁名。例如,  使用db_name.str或 app_name.str 形式的封锁名。

论坛徽章:
0
2 [报告]
发表于 2006-08-16 12:48 |只看该作者
不是已经说得很明白了嘛

论坛徽章:
0
3 [报告]
发表于 2006-08-16 14:51 |只看该作者
设法使用字符串str 给定的名字得到一个锁

得到这个锁有什么用呢?具体应用中有用到的吗?

论坛徽章:
0
4 [报告]
发表于 2006-08-16 16:31 |只看该作者
就是发起请求获得一个锁,用完后再释放,避免发生死锁等问题

论坛徽章:
0
5 [报告]
发表于 2006-08-17 08:39 |只看该作者
谢谢版主。
是不是说str可以是一个表名,然后就会锁定这个表是吗?
str还可以是什么?

论坛徽章:
0
6 [报告]
发表于 2006-08-17 12:49 |只看该作者
自己随便起名都可以

论坛徽章:
0
7 [报告]
发表于 2012-04-10 16:05 |只看该作者
题外话:
虽然此帖已经发出很久了,但是我还是想在这回复一下,我希望给别人解答问题的回复尽量含金量高点

正题:
GET_LOCK(str,timeout) ,我看的也并不多,我的理解是
这个锁的层次类似于pthread_mutex_lock(),为什么这么说呢?mysql的lock table这样的锁,是作用在某个数据库对象之上的,是直接关联了要锁的对象,是比较下层的锁定
而GET_LOCK(str,timeout)--我的理解就是他实际上并不是为了锁定某一个数据库对象,而是像mutex的lock和unlock对一样,是做一个临界区,请求在临界区上排队。

说的不对的话,请帮忙纠正,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP