关于线程依赖问题的解决
2017-03-08 10:43
901 查看
一,理解
并发:同一时间间隔内运行多个线程
并行:不同的CPU同时运行各自的线程,也就是同一时刻多个线程同时进行。
在此仅介绍两个
GCD
//dispatch_semaphore : 信号量
//dispatch_semapore_create: 创建信号量
//dispatch_semaphore_signal: 发送通知
//dispatch_semaphore_wait : 等待信号量
运行代码
-(void)testGCD
{
@autoreleasepool {
//创建信号量
__block
dispatch_semaphore_t sem =
dispatch_semaphore_create(0);
//创建一个队列
dispatch_queue_t queue =
dispatch_queue_create("testBook",
NULL);
//开启一个异步线程
dispatch_async(queue, ^{
for (int a=0; a<5;
a++) {
NSLog(@"a = %d",a);
}
//发送信号量
dispatch_semaphore_signal(sem);
});
//接受信号量
dispatch_semaphore_wait(sem,
DISPATCH_TIME_FOREVER);
for (int b=0; b<5;
b++) {
NSLog(@"b = %d",b);
}
}
}
结果描述
NSOperation
运行代码
//NSOperation
-(void)testOperation
{
//创建队列
NSOperationQueue *queue = [[NSOperationQueue
alloc]init];
//设置队列最大线程数
queue.maxConcurrentOperationCount =
5;
//创建线程A
NSBlockOperation *operationA = [NSBlockOperation
blockOperationWithBlock:^{
for (int c=0; c<5;
c++) {
NSLog(@"c = %d",c);
}
}];
//创建线程B
NSBlockOperation *operationB = [NSBlockOperation
blockOperationWithBlock:^{
for (int d=0; d<5;
d++) {
NSLog(@"d = %d",d);
}
}];
//设置线程依赖
[operationA addDependency:operationB];
//将线程加入队列
[queue addOperation:operationA];
[queue addOperation:operationB];
}
运行结果
并发:同一时间间隔内运行多个线程
并行:不同的CPU同时运行各自的线程,也就是同一时刻多个线程同时进行。
在此仅介绍两个
GCD
//dispatch_semaphore : 信号量
//dispatch_semapore_create: 创建信号量
//dispatch_semaphore_signal: 发送通知
//dispatch_semaphore_wait : 等待信号量
运行代码
-(void)testGCD
{
@autoreleasepool {
//创建信号量
__block
dispatch_semaphore_t sem =
dispatch_semaphore_create(0);
//创建一个队列
dispatch_queue_t queue =
dispatch_queue_create("testBook",
NULL);
//开启一个异步线程
dispatch_async(queue, ^{
for (int a=0; a<5;
a++) {
NSLog(@"a = %d",a);
}
//发送信号量
dispatch_semaphore_signal(sem);
});
//接受信号量
dispatch_semaphore_wait(sem,
DISPATCH_TIME_FOREVER);
for (int b=0; b<5;
b++) {
NSLog(@"b = %d",b);
}
}
}
结果描述
NSOperation
运行代码
//NSOperation
-(void)testOperation
{
//创建队列
NSOperationQueue *queue = [[NSOperationQueue
alloc]init];
//设置队列最大线程数
queue.maxConcurrentOperationCount =
5;
//创建线程A
NSBlockOperation *operationA = [NSBlockOperation
blockOperationWithBlock:^{
for (int c=0; c<5;
c++) {
NSLog(@"c = %d",c);
}
}];
//创建线程B
NSBlockOperation *operationB = [NSBlockOperation
blockOperationWithBlock:^{
for (int d=0; d<5;
d++) {
NSLog(@"d = %d",d);
}
}];
//设置线程依赖
[operationA addDependency:operationB];
//将线程加入队列
[queue addOperation:operationA];
[queue addOperation:operationB];
}
运行结果
相关文章推荐
- linux下的应用程序:关于解决线程的不断重启问题
- 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决
- 关于windebug查询进程中各个线程占用cpu时间,解决CPU占用很大问题
- 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决
- 关于OS中第一线程的问题解决.
- 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决
- 关于调用线程无法访问此对象,因为另一个线程拥有该对象的问题的解决办法
- 如果我是国王:关于解决 Java 编程语言线程问题的建议
- 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决 (android dependencies 源码)
- 关于ios使用线程导致程序不规律的闪退问题解决
- 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决
- 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决
- 关于软件包降级(解决软件安装的依赖问题)
- 关于 OkHttp 依赖冲突问题的解决过程
- 如果我是国王:关于解决 Java 编程语言线程问题的建议
- 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决
- 关于Win32 API(VC作为程序设计语言)的创建线程,解决互斥访问临界资源问题
- 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决
- 关于抢红包线程卡顿的问题解决流程笔记
- 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决