多线程知识

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

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

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

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

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>) {

    要执行代码;

}

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

转载于:https://www.cnblogs.com/niumingming920322/p/5680363.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经典算法题:字典树、并查集、单调栈、二分、带标记函数dp、树、全排列、字符串问题等常用算法

0. Tips 1. 位运算 如何枚举一个二进制状态数字k的子集, 方法就是针对中的二进制为1的位开始进行减法&#xff0c;判断数字k的二进制子集, 像枚举(2^k-1) ~ 0一样枚举其子集&#xff1b; int sub k;do {sub (sub - 1) & k;} while(sub ! k); 比如k 10101的二进制子集…

web窗体的内置对象

内置对象&#xff1a;1、Response - 响应请求对象 Response.Redirect("Default2.aspx"); //重定向 Response.Write("<script>window.open(Default2.aspx);</script>"); ---可以书写任何东西&#xff0c;直接输出出去2、Request - 接收请求对象…

前端学习(2017)vue之电商管理系统电商系统实现表单的预先认证

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

Docker有什么好处?

Docker背后的想法是创建软件程序可移植的轻量容器&#xff0c;让其可以在任何安装了Docker的机器上运行&#xff0c;而不用关心底层操作系统&#xff0c;类似船舶使用的集装箱&#xff0c;野心勃勃的他们成功了。 Docker可以解决虚拟机能够解决的问题&#xff0c;同时也能够解决…

前端学习(2018)vue之电商管理系统电商系统把good_cat转换为字符串

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

bzoj3212 pku3468 A Simple Problem with Integers

一个有初值的数列、区间加、区间查 用线段树直接水过 然而并没有1A&#xff0c;主要是做题太快没看规模结果没注意线段树要用longlong建 卧槽怎么可以这么坑爹&#xff0c;害得我看见wa心慌了&#xff0c;还以为连线段树都要跪 一开始在写下传&#xff08;MDZZ&#xff09;然后…

前端学习(2019)vue之电商管理系统电商系统处理attr参数

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

Java JNI初探

---说明&#xff0c;之前直接百度出来的例子&#xff0c;照猫画虎。没想到的是这例子居然直接来自百度百科&#xff0c;写着写着就囧了。。 ---anyway&#xff0c;写完了就当是给自己看吧。 同事求助&#xff0c;就看了一下&#xff0c;照猫画虎一番&#xff0c;略有所得。 JNI…

前端学习(2020)vue之电商管理系统电商系统之完成商品添加操作

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

cocos2d-lua ARPG手机游戏《烈焰遮天》(客户端+服务端+数据库)发布说明

服务器发布流程及其规范1&#xff0c;环境准备 a, mvn命令行&#xff1a;从\\10.21.210.161\share\tools\apache-maven-3.1.1-bin.tar.gz取出安装包&#xff0c; 解压到本地目录A&#xff0c;添加环境变量M2_HOME指向A&#xff0c;并在系统Path环境变量中增加&qu…

webScoket的浅短的认识

在一般的发送数据请求的时候都是用的http协议&#xff0c;但是对于类似即时聊天&#xff0c;需要客户端与服务器不间断的交互的时候对于http协议来说就不太适用了。因为http协议无法主动把数据发到客户端&#xff0c;而且客户端发送请求之后就会断开连接&#xff0c;无法达到我…

xshell报编码问题时可以修改xshell编码

转载于:https://www.cnblogs.com/Mina89/p/5690529.html

前端学习(2023)vue之电商管理系统电商系统之通过路由加载订单列表

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

(( 所谓data

数据与 数据预处理 s1 – s1 单位化/归一化

访问github很慢问题

文章目录 访问github很慢问题解决重点来了&#xff1a;测试后发现访问&#xff0c;速度飞起实测&#xff0c;香不香&#xff0c;真香&#xff01;wget下载到一半断了&#xff0c;重连方法我是使用wget去下载elkeidup_image_v1.9.1.tar.gz.00压缩包wget的下载中断重新连接下载指…

GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD)

每一个APP都会用到APP引导页&#xff0c;分量不重但是不可缺少&#xff0c;不论是APP的首次安装还是版本的更新&#xff0c;首先展现给用户眼前的也就只有它了&#xff0c;当然这里讲的不是APP引导页的美化而是APP引导页的高度集成&#xff0c;一行代码搞定APP引导页是不是太夸…

(( data

,有时&#xff0c;数据来自熟知的生成源&#xff0c;它可以用f(x)数学描述。 部分来自对客观自然世界的观察 其二 在一些场合&#xff0c;虽然有数据 但是 不知道数据先验于什么分布 (( [注: 所谓分布&#xff0c;是基于统计抽象与统计经验&#xff0c; 倒果为 非