`
shuchaoo
  • 浏览: 41379 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

锁引发的问题

阅读更多

有次被问到怎么样写2个SQL事务避免死锁,这2个事务操作一些相同的表。

其实避免死锁是很困难的,理解死锁的原因,仔细想想如果2个事务访问公共表的顺序相同,那么这样就可以避免死锁,但是前提是这2个事务sql操作可以做到顺序相同。总体感觉这个问题不严谨。

 

其实关于减少SQL Server的死锁有这样一篇文章:http://www.cnblogs.com/zhuor/archive/2006/07/28/462263.html

数据库避免死锁主要有2种方法:(1)一次封锁法,(2)顺序封锁法。

参见:

http://www.cs.xmu.edu.cn/education/fine_courses/database/%BE%AB%C6%B7%BF%CE%B3%CC%BD%A8%C9%E8%C4%DA%C8%DD/3_%CD%F8%C2%E7%B0%E6cai/content/8/8.4.0.htm

 

数据库理论里关于锁的问题非常多,向多级封锁协议,两段封锁协议,多粒度锁等等,都是为了解决并发问题。

 

其实不只数据库里,操作系统里同样关注锁的问题,并提供了死锁避免多种方法:

(1).一次封锁法,操作系统里也叫资源静态分配法。

(2).还有一种的就是让进程只每次只能拥有一个资源,这个显然不切实际。

(3).资源编号,只能按编号递增申请资源。
(4).是著名的银行家算法

其实死锁主要分为死锁避免,死锁检测,死锁解除。

 

锁除了我们经常使用信号量,还有linux内核中使用的自旋锁也是一个很有意思的锁,http://162.105.203.49:8080/wdb/upload/forum21_f_2.doc

自旋锁可以在中断上下文中使用,与信号量还是有区别的:http://blog.chinaunix.net/u2/83703/showart_1359265.html

所谓中断上下文就是中断发生时的上下文,哈哈,具体可以参见《linux内核设计与实现》以及http://thns.tsinghua.edu.cn/thnsebooks/ebook204/10.pdf注意中断上下文中不能睡眠和i/o操作

linux内核同步主要使用屏蔽中断、原子变量、自旋锁、信号量、环形缓冲区等。

http://www.yuanma.org/data/2008/0913/article_3161.htm

总之锁是一个很有意思的问题。

           

分享到:
评论

相关推荐

    MySQL锁类型以及子查询锁表问题、解锁1

    总的来说,理解和正确使用MySQL的锁机制对于优化并发性能和避免并发问题至关重要。在设计和编写SQL语句时,应尽可能减少锁定范围,提高系统效率。同时,了解如何排查和处理死锁问题也是数据库管理员必备的技能。

    Oracle 锁机制问题详解

    一般情况下,只有在试图结合软件与自动锁定机制出现问题,或者编程人员编写的代码存在问题时才会引发锁相关的错误。Oracle 支持多种类型的锁,包括共享锁(Share Locks)和排他锁(Exclusive Locks),这些锁有助于...

    Redis分布式锁存在的问题及解决方案(值得珍藏)

    但要注意的是,设置过期时间必须是原子性的,否则可能导致多个进程同时获取到锁,引发新的问题。例如,可以使用`SET`命令的`EX`和`NX`选项,如`SET key value EX timeout NX`,这只有在键不存在时才会设置,并设定一...

    SAP ABAP应用程序中"锁"的介绍

    总之,SAP ABAP的锁机制是保证数据一致性、避免并发访问引发问题的关键技术。理解并正确使用锁的概念、参数和管理方式,对于编写高效且安全的SAP应用程序至关重要。开发者应根据业务场景选择合适的锁模式,合理设置...

    spring实现集群同步锁

    在分布式系统中,当多个节点同时访问共享资源时,可能会引发数据不一致的问题。为了解决这个问题,我们需要一种机制,即集群同步锁,来确保同一时间只有一个节点可以执行特定的操作。Spring为此提供了一种灵活的解决...

    oracle数据库锁使用

    Oracle 数据库锁是确保数据完整性、一致性以及并发操作的关键机制。在Oracle中,锁主要分为两类:数据锁(DML...在设计事务和处理并发操作时,应根据业务需求选择合适的锁类型,并注意锁的兼容性和可能引发的并发问题。

    Oracle强制释放锁的命令

    ,其中 sid 和 serial# 是查询数据库引发的锁相关信息的结果。例如,使用以下命令查询锁相关信息: select username,object_name,machine,s.sid,s.serial#,logon_time from v$locked_object l,dba_objects o ,v$...

    oracle存储过程解锁

    然而,在多用户并发访问的环境下,存储过程可能会因为某些操作而被锁定,导致其他进程无法访问或修改该存储过程,从而引发一系列问题,如应用程序挂起、数据库性能下降等。 ### 描述:“如果存储过程被锁住,可以...

    行业-59 对MySQL锁机制再深入一步,共享锁和独占锁到底是什么?l.rar

    死锁是锁机制可能导致的问题之一。当两个或更多事务相互等待对方释放锁时,就会发生死锁。MySQL通过检测和回滚其中一个事务来解决死锁,以打破循环等待。为避免死锁,开发人员需要谨慎设计事务的执行顺序,并合理...

    php-redis锁-多种加锁解锁

    这种方法简单但可能存在风险,如果处理逻辑执行时间超过锁的过期时间,可能导致锁提前释放,引发问题。 - **控制器销毁自动解**:在PHP中,可以将解锁操作放在析构函数中,当控制器实例结束时自动执行。这种方式...

    初见恶搞锁机软件生成器

    同时,也要考虑道德边界,尊重他人的感受,避免引发不必要的冲突。 4. **安全分享**:将生成的恶搞锁机程序分享给他人时,要确保对方了解这只是一个玩笑,避免引起误会。 5. **更新与维护**:软件开发者可能会定期...

    使用分布式锁出现的问题及解决方案.doc

    2. 锁超时问题:如果任务执行时间超过锁的过期时间,可能导致锁自动释放,从而引发并发问题。 为了解决这些问题,可以考虑使用Redlock算法。Redlock通过连接多个独立的Redis Master节点来提高可用性和健壮性。其...

    广联达全国五代写锁工具

    5. **日志记录**:为便于追踪和审计,工具会记录每一次的锁定、解锁操作,以及相关的用户信息,方便后期的问题排查和工作流程分析。 6. **用户体验优化**:在用户界面和操作流程上,广联达全国五代写锁工具更加人性...

    直流闭锁引发交流联络线功率波动的机理以及峰值计算

    直流闭锁引发交流联络线功率波动本质上是一个阶跃扰动问题,直流闭锁激发出了两区域互联电网的振荡模式,因此应用二阶系统阶跃响应理论进行研究。由于区内直流闭锁和区外直流闭锁故障所对应的阶跃扰动量不同,故分别...

    SQLServer锁机制探究

    理解SQL Server的锁机制并合理应用,对于优化数据库性能、防止数据不一致以及解决并发问题具有重要意义。在实际应用中,需要根据业务需求和并发情况,选择合适的事务隔离级别和锁策略,以达到最佳的并发性能和数据...

    深思-532写锁及授权

    例如,在广联达532系统中,可能有多个用户同时访问同一数据资源,写锁可以避免并发写入导致的问题,如脏读、不可重复读和幻读等。 授权是系统安全的重要组成部分,它定义了用户或角色对系统资源的访问权限。在"深思...

    552写锁及 授权

    在编程实践中,开发人员需要谨慎使用写锁,因为长时间持有写锁会导致其他事务等待,可能引发系统性能问题。因此,合理设计事务和锁的使用,以及适时地释放锁,对于保持系统的高效运行至关重要。 总结一下,写锁是...

    DB2 重命名不同的索引时出现的锁等待问题-contracted.doc

    在DB2数据库中,重命名不同的索引可能会引发一种名为EOT(End of Table)锁等待问题,这在日常操作中并不常见,因此可能导致DBA在遇到时感到困惑。EOT锁是一种特定类型的行级锁定,它在某些情况下用于表的元数据管理...

    DB2数据库锁升级分析及处理步骤

    通过监控数据和日志,识别频繁引发锁升级的事务或查询,进而优化SQL语句、调整索引策略或重新设计数据库结构。 **3.2 调整锁升级策略** DB2提供了多种参数和配置选项来控制锁升级行为,如`LOCKSIZE`和`LOCKSURGE`...

    CVI 线程锁、线程安全变量实例

    这类变量的修改和访问都是原子操作,不会因线程切换而引发问题。在LabWindows/CVI中,实现线程安全变量可能需要使用特定的线程库函数,如`cvAtomicInc()` 和 `cvAtomicDec()`,它们提供原子性地增加或减少变量的值。...

Global site tag (gtag.js) - Google Analytics