iOS详解多线程(实现篇——pThread)

iOS详解多线程(实现篇——pThread),第1张

上一节中,我们探究了OC中重要的实现多线程的方法——NSOperation。本节中,我们了解一下不常用的一种创建多线程的方式——pThread。

相关链接:

NSOpreation链接: iOS详解多线程(实现篇——NSOperation)

GCD链接: iOS详解多线程(实现篇——GCD)

NSThread链接: 详解多线程(实现篇——NSThread)

多线程概念篇链接: 详解多线程(概念篇——进程、线程以及多线程原理)

源码链接: https://github.com/weiman152/Multithreading.git

1.NSThread(OC)

2.GCD(C语言)

3.NSOperation(OC)

5.其他实现多线程方法

pThread并不是OC特有的实现多线程的方法,而是Unix、Linux还有Windows都通用的一种实现多线程的方式。

pThread的全称是POSIX threads,是线程的 POSIX 标准。

pThread是C语言的,在iOS的开发中极少使用。

使用之前,记得先导入头文件

运行结果:

从结果可以看出,开启了新的线程,执行任务。

pthread_create() 创建一个线程

pthread_exit() 终止当前线程

pthread_cancel() 中断另外一个线程的运行

pthread_join() 阻塞当前的线程,直到另外一个线程运行结束

pthread_attr_init() 初始化线程的属性

pthread_attr_setdetachstate() 设置脱离状态的属性(决定这个线程在终止时是否可以被结合)

pthread_attr_getdetachstate() 获取脱离状态的属性

pthread_attr_destroy() 删除线程的属性

pthread_kill() 向线程发送一个信号

由于pThread我们基本用不到,所以不再做深入研究。

1、选项在 工具->选项->文本编辑器->C/C++->高级 里面的禁用#include自动完成的,FALSE改为TRUE。

2、自己在入门的时候很苦恼的一个问题,需要的朋友可以看下。

具体如下:

1、简介

EXCEL表处理软件是美国微软公司研制的办公自动化软件OFFICE 中的重要成员,经过多次改进和升级,最新版本为EXCEL2000。它能够方便的制作出各种电子表格,使用公式和函数对数据进行复杂的运算用各种图表来表示数据直观明了利用超级链接功能,用户可以快速打开局域网或Interner上的文件,与世界上任何位置的互联网用户共享工作薄文件。

2、软件

Excel中大量的公式函数可以应用选择,使用Microsoft Excel可以执行计算,分析信息并管理电子表格或网页中的数据信息列表,可以实现许多方便的功能,带给使用者方便。与其配套组合的有:Word、PowerPoint、Access、InfoPath及Outlook,Publisher

3、百科名片

Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macintosh *** 作系统的电脑而编写和运行的一款试算表软件。Excel 是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理、统计分析和辅助决策 *** 作,广泛地应用于管理、统计财经、金融等众多领域。

先看一下APUE第三版对于条件变量的说明:

条件变量是另一种线程同步机制,它为线程间共享的对象提供了同步的方法。当条件变量配合互斥锁(Mutex)使用时,允许多个线程处在一种自由等待任意条件发生的状态。

条件变量自身由互斥锁(Mutex)保护。线程必须在修改条件状态之前先对其上锁,其他线程不会在获取锁之前被通知到其状态变化,因为只有获取到锁才可以计算条件。

条件变量的数据类型是 pthread_cond_t ,条件变量属性的类型是 pthread_condattr_t ,它们都包含在头文件<pthread.h>中。

条件变量使用之前必须初始化,有两种方法:

需要释放条件变量时,使用pthread_cond_destroy即可。

调用phread_cond_wait或pthread_cond_timewait(以下简称wait函数)可以使当前线程等待某一条件的发生。两者的区别在于后者可以指定等待时间。

调用wait函数时,系统使调用线程进入等待状态后 释放锁 (所以我们必须先加锁后调用wait函数)。在这一步 *** 作中的检查条件和进入等待是 原子 *** 作 ,所以线程不会错过条件的变化。当wait函数返回时,mutex会 再次被加锁

其中pthread_cond_timewait中用到的timespec结构定义如下:

需要注意的是,timespec是一个绝对时间,所以在使用前我们需要先取得当前时间,再加上等待时间。例如下面这样:

如果时间到了还没有等到条件变化,函数会对mutex重新加锁并返回一个ETIMEOUT的错误。

当wait函数返回成功时, 需要重新检查条件 ,因为条件有可能已经被其他线程修改。

当条件满足时,可以用这两个函数用来通知其他线程。

pthread_cond_signal会唤醒至少一个等待的线程,而pthread_cond_broadcast会唤醒所有等待的线程。必须注意的是:我们 必须在状态发生变化之后再发送信号给其他线程

条件变量的数据类型是 pthread_cond_t ,它主要有两种属性:

设置进程间共享属性:

设置时钟属性:

pthread_cond_timewait函数用于在等待条件变量时提供超时功能,不过该函数的超时时间是一个绝对时间。默认使用系统时间,这意味着若修改系统时间,那么超时就不准确:有可能提前返回,也可能要几年才返回。这在某些情况下会导致bug,这时我们可以通过设置条件变量的时钟属性来避免这个问题。下面的例子展示了如何使用这个属性:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11443448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存