IOS 多线程,线程同步的三种方式
本文主要是讲述 IOS 多线程,线程同步的三种方式,更多IOS技术知识,请登陆疯狂软件教育官网。
一般情况下我们使用线程,在多个线程共同访问同一块资源。为保护线程资源的安全和线程访问的正确性。
在IOS中我们一般情况下使用以下三种线程同步代码方式:
第一种和第二种代码同步的使用方法,一般情况下我们只需要使用NSLock和NSCondition申明2个属性。然后给此属
性赋对应的值。那么即可作为安全防控的线程手段。
同时也可以保证线程的资源安全。
1:NSLock方式
[xxxlock lock] //上锁
同步代码块
[xxxlock unlock]//解锁
2:NSCondition方式
[xxxCondition lock] //上锁
同步代码块
[xxxCondition unlock]//解锁
第三种方式:在使用synchronized的时候,括号中我们一般情况下只需要传一个self即可。同步代码块 当有线程
进去之后会把括号里面对象的锁旗标锁上,其他线程会在外面等着 当进去的线程出去的时候会把锁打开 其余线程
再进一个。这样才能保护线程放问资源的安全性。
3:@synchronized( 同一对象){
线程执行代码;
}
线程资源防控示例代码:
[objc]view plaincopyprint?在CODE上查看代码片派生到我的代码片
-(void)sellTickets{
while (YES) {
NSString *name = [NSThread currentThread].name;
// 同步代码块 当有线程进去之后会把括号里面对象的锁旗标锁上,其他线程会在外面等着 当进去的线程
出去的时候会把锁打开 其余线程再进一个
// @synchronized(self){
// [self.myLock lock];
[self.myCondition lock];
NSLog(@"%@开始卖%d号票",name,self.selledCount+1);
[NSThread sleepForTimeInterval:.2];
self.selledCount++;
NSLog(@"%@卖掉了%d号票,还剩%d张",name,self.selledCount,self.totalCount-
self.selledCount);
// [self.myLock unlock];
[self.myCondition unlock];
}
// }
}
IOS 多线程,线程同步的三种方式的更多相关文章
- ios多线程开发的常用三种方式
1.NSThread 2.NSOperationQueue 3.GCD NSThread: 创建方式主要有两种: [NSThread detachNewThreadSelector:@selector ...
- java核心知识点学习----创建线程的第三种方式Callable和Future CompletionService
前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...
- java核心知识点----创建线程的第三种方式 Callable 和 Future CompletionService
前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...
- Java线程同步的四种方式详解(建议收藏)
Java线程同步属于Java多线程与并发编程的核心点,需要重点掌握,下面我就来详解Java线程同步的4种主要的实现方式@mikechen 目录 什么是线程同步 线程同步的几种方式 1.使用sync ...
- Java 实现线程安全的三种方式
一个程序在运行起来的时候会转换成进程,通常含有多个线程. 通常情况下,一个进程中的比较耗时的操作(如长循环.文件上传下载.网络资源获取等),往往会采用多线程来解决. 比如显示生活中,银行取钱问题.火车 ...
- Java中实现线程同步的三种方法
实现同步的三种方法 多线程共享数据时,会发生线程不安全的情况,多线程共享数据必须同步. 实现同步的三种方法: 使用同步代码块 使用同步方法 使用互斥锁ReetrantLock(更灵活的代码控制) 代码 ...
- java多线程二之线程同步的三种方法
java多线程的难点是在:处理多个线程同步与并发运行时线程间的通信问题.java在处理线程同步时,常用方法有: 1.synchronized关键字. 2.Lock显示加锁. 3.信号量Se ...
- 【转】 Linux 线程同步的三种方法
线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点.linux下提供了多种方式来处理线程同步,最常用的是互斥锁.条件变量和信号量. 一.互斥锁(mutex) 通过锁机制实现线程间的 ...
- C++线程同步的四种方式(Windows)
为什么要进行线程同步? 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作.更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解.正常情况下对这种处理结果的 ...
随机推荐
- [LeetCode#246] Missing Ranges Strobogrammatic Number
Problem: A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked a ...
- 关于如何导入GPUImage
今天是我第一天做项目哈,由于前几天实在是没有很多空,我姐结婚,事情太多,所以今天才开始真正写项目,希望不要太晚. 今天是晚上开始的,预期的计划就是能够把GPUImage成功导入,然后使用一些其中的东西 ...
- [转载]jQuery UI 使用
最近项目中使用了一些插件来做页面,这里把jQuery UI的使用分享出来,希望 对新手有帮助.文章结尾附源码下载. 1 jQuery UI 2 为我所用 2.1 Tabs 2. ...
- Transaction: atomicity, consistency, separability, persistence
Transaction: atomicity, consistency, separability, persistence http://langgufu.iteye.com/blog/143440 ...
- maven tomcat1.7环境下构建javaweb 项目
tomcat用户权限设置 在tomcat安装路径\conf目录下tomcat-users.xml添加: <role rolename="admin-gui"/> < ...
- Oracle、MySql、Sql Server比对
1. 价格 MySql:廉价(部分免费):当前,MySQL採用双重授权(DualLicensed),他们是GPL和MySQLAB制定的商业许可协议.假设你在一个遵循GPL的自由(开源)项目中使用 ...
- linux下使用fscanf实现scanf
首先,我们知道,linux下的scanf标准库函数是一个可变参的函数,那么,我们自己要实现一个scanf也必须是一个可变参的. 其实,在liunx的库中就提供了这样的的宏,来方便我们自己来实现变参函数 ...
- TOJ 2732存钱计划(三)(单源最短路)
存钱计划(三) 时间限制(普通/Java):1000MS/30000MS 运行内存限制:65536KByte 总提交: 18 测试通过: 16 描述 TZC的店铺比较 ...
- 只有在配置文件中或 Page 说明会 enableSessionState 至 true 时刻,能够使用会话状态。另外,还要确保应用程序配置 // 段包含 System.Web.SessionSta
首先,弄清楚我们的目的,我的目标是验证用户登录.那是,Session["userName"]!=null 在ok该 起初,我是这么写的,结果给出,提示如果上述错误标题,在调查的很长 ...
- LCA在线算法ST算法
求LCA(近期公共祖先)的算法有好多,按在线和离线分为在线算法和离线算法. 离线算法有基于搜索的Tarjan算法较优,而在线算法则是基于dp的ST算法较优. 首先说一下ST算法. 这个算法是基于RMQ ...