文档章节

NSThread

阿元
 阿元
发布于 2016/05/16 17:24
字数 437
阅读 20
收藏 0
点赞 2
评论 0

 

#import <UIKit/UIKit.h>

@interface VCRoot : UIViewController
{
    //计数器
    int _count ;
    
    //线程锁
    //可以对变量进行加锁操作
    NSLock* _lock ;
}

@end

#import "VCRoot.h"

@interface VCRoot ()

@end

@implementation VCRoot

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //创建一个线程锁
    _lock = [[NSLock alloc] init] ;
}

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //创建线程一
    //创建一个线程
    //参数一:线程执行函数的目标对象
    //参数二:为线程要执行的函数
    //参数三:可以传递一个参数到线程中执行
    //返回一个线程对象
    //仅仅创建了线程,并未立刻执行线程
    [NSThread detachNewThreadSelector:@selector(updateT1:) toTarget:self withObject:nil] ;
    
    //字典对象
    //
    NSDictionary* dicValue = [NSDictionary dictionaryWithObjectsAndKeys:
                              [NSNumber numberWithInt:0],@"SNum",
                              [NSNumber numberWithInt:1000000],@"ENum",nil] ;
    //创建线程二
    //将参数传入线程
    NSThread* t2 = [[NSThread alloc] initWithTarget:self selector:@selector(updateT2:) object:dicValue] ;
    //开启线程并执行线程中的函数
    [t2 start] ;
}

-(void) updateT1:(id) obj
{
    int i = 0 ;
    while (true)
    {
        //对变量进行加锁操作
        //可以对以下代码操作进行原子级绑定
        //不允许其他线程进行操作
    
        [_lock lock] ;
        _count++ ;
        
        //直到操作结束之后,将线程锁解开
        //允许其他线程操作
        [_lock unlock] ;
        
        i++ ;
        if (i == 1000000)
        {
            //break ;
            
            NSLog(@"r1 = %d",_count) ;
            //获得执行当前函数的线程
            NSThread* curT = [NSThread currentThread] ;
            
            //通知系统将当前的线程取消
            [curT cancel] ;
            //当前线程已经被取消
            if ([curT isCancelled] == YES)
            {
                //直接退出线程,直接将当前的线程结束掉
                //系统直接停止当前线程
                [NSThread exit] ;

            }
        }
        //NSLog(@"count1 = %d",_count) ;
    }
}

//线程二的参数
-(void) updateT2:(id) obj
{
    
    NSLog(@"dic = %@",obj) ;
    NSDictionary* dic = (NSDictionary*) obj ;
    
    int start = [[dic objectForKey:@"SNum"] intValue] ;
    
    int end = [[dic objectForKey:@"ENum"] intValue] ;
    
    //start = 0
    //end = 100000
    for (int i = start; i < end; i++)
    {
        [_lock lock] ;
        _count++ ;
        [_lock unlock] ;
        //NSLog(@"_count2 = %d",_count) ;
    }
    
    NSLog(@"r2 = %d",_count) ;
}

@end

© 著作权归作者所有

共有 人打赏支持
阿元
粉丝 5
博文 154
码字总数 98469
作品 0
浦东
程序员

暂无相关文章

Qt中的坑--QTreeWidget添加item 不能显示出来

QTreeWidget* pTree = ui.TreeCheckList; QTreeWidgetItem* item = new QTreeWidgetItem(pTree) ;item->setText ( 0, "test" );pTree->addTopLevelItem (item ); 原因是因为创建一个......

k91191 ⋅ 25分钟前 ⋅ 0

使用Guava的RateLimiter做限流

场景: 1. 在日常生活中,我们肯定收到过不少不少这样的短信,“京东最新优惠卷…”,“天猫送您…”。这种类型的短信是属于推广性质的短信。这种短信一般群发量会到千万级别。然而,要完成这...

wind2012 ⋅ 25分钟前 ⋅ 0

QSlider重新enterEvent

#ifndef DIALOG_H#define DIALOG_H#include <QDialog>namespace Ui {class Dialog;}class Dialog : public QDialog{ Q_OBJECTpublic: explicit Dialog(QW......

xxdd ⋅ 26分钟前 ⋅ 0

生产环境redis备份与恢复

生产环境redis备份与恢复 Tyrant0532 0人评论 1563人阅读 2018-02-01 20:34:10 redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。生产中我们主...

rootliu ⋅ 28分钟前 ⋅ 0

nginx中出现403forbidden错误

nginx “403 Forbidden” 错误 出现这个错误一般是因为以下原因: 网站禁止特定的用户访问所有内容,例:网站屏蔽某个ip访问。 访问禁止目录浏览的目录,例:设置autoindex off后访问目录。 ...

河图再现 ⋅ 28分钟前 ⋅ 0

上海云栖:金融政企行业的CDN最佳实践

摘要: 在刚刚结束的上海云栖大会飞天技术汇分论坛上,阿里云视频云产品架构师罗小飞进行了《阿里云CDN——面向金融政企的CDN最佳实践》主题分享,为上海的嘉宾介绍CDN的解决方案与技术服务体...

猫耳m ⋅ 33分钟前 ⋅ 0

docker 基本操作

docker介绍 Docker项目提供了构建在Linux内核功能之上,协同在一起的的高级工具。其目标是帮助开发和运维人员更容易地跨系统跨主机交付应用程序和他们的依赖。Docker通过Docker容器,一个安全...

haoyuehong ⋅ 34分钟前 ⋅ 0

上海云栖:金融政企行业的CDN最佳实践

摘要: 在刚刚结束的上海云栖大会飞天技术汇分论坛上,阿里云视频云产品架构师罗小飞进行了《阿里云CDN——面向金融政企的CDN最佳实践》主题分享,为上海的嘉宾介绍CDN的解决方案与技术服务体...

阿里云云栖社区 ⋅ 37分钟前 ⋅ 0

安装与配置hadoop

一、CentOS7安装 java8,参考centos7.0 安装java1.8,tomcat 二、安装hadoop 版本V3.03 1、下载并解压hadoop # mkdir /usr/local/app# mkdir /usr/local/app/hadoop# cd /usr/local/app/had......

iturtle ⋅ 38分钟前 ⋅ 0

Idea设置Serializable自动生成

File --> Settings --> Editor --> Inspections ->Serialization issues,在该项下找到“Serializable class without 'serialVersionUID' ”并勾选...

Gmupload ⋅ 41分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部