zoukankan      html  css  js  c++  java
  • 多线程知识

    同步:多个任务依次按顺序执行

    异步:多个任务可以时执行

    进程:一个正在运行的应用程序就是一个进程,为应用开辟内存空间

    线程:一个进程可以有多个线程,是进程的基本执行单元,执行应用的代码/任务

    NSThread:

        创建线程

        方法一:对象方法

            NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(demo:) object:@"mm"];

            [thread start];

        方法二:类方法

            [NSThread detachNewThreadSelector:@selector(demo:) toTarget:self withObject:@"mm"];

        方法三

            [self performSelectorInBackground:@selector(demo:) withObject:@"mm"];

            -(void)demo:(NSString *)str{

                NSLog(@"%@--%@",[NSThread currentThread],str);

                }

    pthread:

            创建线程:

            NSLog(@"--%@--",[NSThread currentThread]);

            NSString *str = @"mm";

            pthread_t ID;

            int result = pthread_create(&ID, NULL, demo, (__bridge void *)(str));

            if (result == 0) {

                NSLog(@"成功 ");

        

            }else{

                NSLog(@"失败");

                }

            要调用函数

            void* demo (void *perme){

                    NSString *str = (__bridge NSString *)(perme);

                    NSLog(@"%@ %@",[NSThread currentThread],str);

                    return NULL;

            }

    线程状态(五个):新建-就绪-运行-阻塞-死亡

     例子:

    新建:NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(demo:) object:@"mm"];

    就绪: [thread start]

    运行状态:(计算机决定,程序员不可控)

    阻塞:  [NSThread sleepForTimeInterval:3];

    死亡:  [NSThread exit]

    NSThread线程属性:

    thread.name:线程名称

    thread.stackSize 线程在内存所占内存大小

    thread.threadPriority 优先级(只是增大该线程的调用频率,不能保证限执行完毕) 取值范围(0,1),默认为0.5;

     //多线程共享资源问题

    NSThread *thread1 = [[NSThread alloc]initWithTarget:self selector:@selector(demo) object:@"mm"];

    [thread1 start];

    NSThread *thread2 = [[NSThread alloc]initWithTarget:self selector:@selector(demo) object:@"mm"];

    [thread2 start];

     int count;

    -(void)demo{

        while (YES) {

            if (count > 0) {

                count -= count;

                NSLog(@"%d",count);

            }else{

                NSLog(@"结束");

                break;

            }

        }

    }

     会出现资源混乱:解决方法(互斥锁:使用的技术就是线程同步技术)能够有效防止多线程抢夺资源造成的数据安全问题

    线程同步:多线程按顺序的执行任务;

    互斥锁:@synchronized(1.必须继承与NSObject 2.必须是全局变量<一般设为self>) {

        要执行代码;

    }

    注意:加锁后线程的执行效率会比不加锁低,但保证了同时操作全局变量的安全性

  • 相关阅读:
    JQuery插件,轻量级表单模型验证(续 二)
    关于DateTimeOffset的爱恨情仇
    JQuery插件,轻量级表单模型验证(续 一)
    asp.net 远程模型验证
    JQuery插件,轻量级表单模型验证
    Ef Core增加Sql方法
    初识依赖注入
    Core下简易WebApi
    sql语句实现行转列练习
    sql语句基本查询操作
  • 原文地址:https://www.cnblogs.com/niumingming920322/p/5680363.html
Copyright © 2011-2022 走看看