常用锁基本使用情况

1.在多线程的情况下,使用锁变得非常重要,一旦一个线程获得锁,其他线程一定等待.

@synchronized互斥锁:只能加锁Objective-C对象,会隐式地添加异常处理代码,也就是当发生异常时会

自动释放互斥锁,所以会有一定的性能损耗

dispatch_async(dispatch_get_global_queue(0,0), ^{

@synchronized(_myLockObj){  给对象加锁,防止多线程同时访问。

}};

2.

NSLock互斥锁:  NSLock类使用的是POSIX线程来实现它的锁操作,而且需要注意的是必须在同一 线程内发送unlock消息,否则会发生不确定的情况。  NSLock不能被用来实现迭代锁,因为 如果发生lock消息两次的话,整个线程将被永久锁住

dispatch_async(dispatch_get_global_queue(0, 0), ^{

[lock lock];

NSLog(@"123496978");

[lock unlock];

});

dispatch_async(dispatch_get_global_queue(0, 0), ^{

[lock lock];

NSLog(@"uweujejwdjje");

[lock unlock];

});

dispatch_async(dispatch_get_global_queue(0, 0), ^{

[lock lock];

NSLog(@"123");

[lock unlock];

});

dispatch_async(dispatch_get_global_queue(0, 0), ^{

[lock lock];

NSLog(@"uweu");

[lock unlock];

});   //执行完和串行效果一样,依次执行

3

//NSConditionLock条件锁:可以设置其条件,下一个线程条件设置(10)相同或者不设置条件线程也会执行。

dispatch_async(dispatch_get_global_queue(0, 0), ^{

[conditionlock lockWhenCondition:10];

NSLog(@"123496978");

[conditionlock unlock];

});

dispatch_async(dispatch_get_global_queue(0, 0), ^{

[conditionlock lock];

NSLog(@"uweujejwdjje");

[conditionlock unlockWithCondition:10];

});

4.

NSCondition锁:  一个线程在等待信号而阻塞时,可以被另外一个线程唤醒,是互斥锁和条件锁的结合体

dispatch_async(dispatch_get_global_queue(0, 0), ^{

[condition lock];

NSLog(@"123496978");

[condition unlock];

});

dispatch_async(dispatch_get_global_queue(0, 0), ^{

[condition lock];

NSLog(@"uweujejwdjje");

[condition unlock];

});

时间: 2024-11-09 22:16:38

常用锁基本使用情况的相关文章

java 常用锁

公平锁和非公平锁 1.公平锁,是指多个线程按照申请的顺序来获取锁,类似排队打饭,先来后到. 2.非公平锁,是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程 比先申请的线程优先获取锁,在高并发情况下,有可能会造成优先级反转或者饥饿现象. Java ReentrantLock而言,通过构造函数指定该锁是否是公平锁,默认是非公平锁,非公平锁的优点在于吞吐量比公平锁大. 对于Synchronized而言,也是一种非公平锁. 可重入锁(也叫做递归锁) 指的是同一个线程外层函数获得锁之后,

sql的几种常用锁简述

SELECT * FROM dbo.AASELECT * FROM dbo.B--1.排它锁--增删改查都不行--这个是数据库自己,为了出现数据错乱.脏数据自己加的处理机制--连接1begin tran update dbo.B set name='bb' where id=1 waitfor delay '00:00:30' --等待30秒 commit tran --在第二个连接中执行以下语句 begin tran select * from B commit tran --若同时执行上述两

mysql什么情况下会触发表锁

锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素.从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂.本章我们着重讨论MySQL锁机制的特点,常见的锁问题,以及解决MySQL锁问题的一些方法或建议. MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著

java中常用的锁机制

基础知识 基础知识之一:锁的类型 锁就那么几个,只是根据特性,分为不同的类型 锁的概念 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制.锁旨在强制实施互斥排他.并发控制策略. 锁通常需要硬件支持才能有效实施.这种支持通常采取一个或多个原子指令的形式,如"test-and-set", "fetch-and-add" or "compare-and-swap"".这些指令允

RR隔离级别下锁情况(探究gap锁和行锁)

!!!我的数据库演示版本为5.5,以后会追加最新数据库的演示版本 间隙锁(GAP Lock)时InnoDB在可重复读下的隔离级别下为了解决幻读问题引入的锁机制.幻读存在的问题是因为在新增或者更新时如果进行查询,会出现不一致的现象,这时单纯的使用行锁无法满足我们的需求,我们需要对一定范围的数据加锁,防止幻读. 可重复读隔离级别就是数据库通过行锁和间隙锁(不要搞混gap lock和next-key lock)共同组成来实现的,在网上抄了一下加锁的规则,然后自己进行一下验证: 1.加锁的基本单位是(n

Java显式锁学习总结之二:使用AbstractQueuedSynchronizer构建同步组件

Jdk1.5中包含了并发大神Doug Lea写的并发工具包java.util.concurrent,这个工具包中包含了显示锁和其他的实用同步组件.Doug Lea在构建锁和组件的时候,大多是以队列同步器(AbstractQueuedSynchronizer)为基础的,因此AbstractQueuedSynchronizer可以看作是并发包的基础框架.因此掌握了AbstractQueuedSynchronizer的实现原理,也就掌握了大多数并发组件的实现原理. AbstractQueuedSync

【锁】Oracle锁系列

[锁]Oracle锁系列 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 锁的概念.分类.及其模拟 ② 查询锁的视图及视图之间的关联 ③ 锁的参数(DML_LOCKS.DDL_LOCK_TIMEOUT) ④ FOR UPDATE及FOR UPDATE OF系列 ⑤ 带ONLINE和不带ONLINE创建索引的锁情况(是否阻塞DML操作) ⑥ 包或存过不能编译的解决方法

从浅到深掌握Oracle的锁

1.分别模拟insert,update和delete造成阻塞的示例,并对v$lock中的相应的信息进行说明,给 出SQL演示. Insert示例 会话1:SQL> select * from t1;        ID         1         2         3         4 SQL> alter table t1 add primary key(id);表已更改. SQL> select * from v$lock where type in ('TX','TM'

锁机制及锁优化

   锁      在Java中目前有两种锁机制防止代码块受到并发访问的干扰:.java语言提供了一个synchronized (内部锁)或Lock/Condition(显示锁) 关键达到这一目的,在java SE 5.0引入了Lock/ReentranLock(重入锁)类. 锁具有以下作用: (1)锁用来保护代码片段,任何时刻只能有一个线程执行被保护的代码. (2)锁可以哦管理视图进入被保护代码段的线程 (3)锁可以拥有一个或多个相关条件对象 (4)每个条件对象管理哪些已经进入被保护的代码片段