linux多线程编程(中嵌教育-嵌入式linux开发课件),linux多线程编程(中嵌教育-嵌入式linux开发课件).ppt...

linux多线程编程(中嵌教育-嵌入式linux开发课件).ppt

linux多线程编程 Linux下线程概述 linux线程实现 1、Linux下线程概述 进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。 线程通常叫做轻型的进程。线程是在共享内存空间中并发执行的多道执行路径,他们共享一个进程的资源。 因为线程和进程比起来很小,所以相对来说,线程花费更少的CPU资源。 线程按照其调度者可分为用户级线程和内核级线程两种。 (1)用户级线程 主要解决的是上下文切换的问题,其调度算法和调度过程全部有用户决定。 (2)内核级线程 有内核调度机制实现。 现在大多数操作系统都采用用户级线程和内核级线程并存的方法。用户级线程可与内核级线程实现“一对一”,“一对多”的对应关系。 2、linux线程实现 以下线程均为用户级线程。在linux中,一般采用Pthread线程库实现线程的访问与控制,由POSIX提出,具有良好的可移植性。 2.1 线程创建与退出 创建线程使用pthread_create函数。在线程创建以后,就开始运行相关的线程函数。线程退出时使用函数pthread_exit,是线程的主动行为。注意进程退出时使用exit函数,线程中用pthread_exit替代exit。 由于一个进程中的多个线程共享数据段,因此通常在线程退出后,退出线程所占用的资源并不会随线程结束而释放。所有需要pthread_join函数来等待线程结束,类似于wait系统调用。 创建进程: #include pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg) thread:线程标识符 attr:线程属性设置 start_routine:线程函数起始地址 arg:传递给start_routine的参数 进程退出: #include pthread_exit( void *retval ) retval: pthread_exit调用者线程的返回值,可由其他函数和pthread_join来检测获取。 等待进程退出: #include pthread_join( pthread_t *th,void **thread_return ) th:等待线程的标识符 thread_return:用户定义指针,用来存储被等待线程的返回值 线程实例见:thread.c 2.2 修改线程属性 在thread_creat函数中有设置线程属性参数,这些属性包括绑定属性、分离属性、堆栈地址、堆栈大小、优先级。系统默认属性为非绑定、非分离、缺省1M的堆栈、与父进程同样级别的优先级。 分别介绍绑定属性和分离属性。 1、绑定属性 在linux系统中,可实现一个用户级线程与一个内核级线程相对应的“一对一”线程机制。绑定属性是指一个用户级线程固定的分配给一个内核级线程。非绑定属性则是指用户级线程与内核级线程的关系不是始终固定的,而是由系统来控制分配。 2、分离属性 分离属性是用来决定一个线程以什么样的方式来终止自己。在非分离情况下,当一个线程结束时,它所占用的系统资源并没有完全释放,也没有真正终止。只有当pthread_join()函数返回时,该线程才释放自己占用的资源。而在分离情况下,一个线程结束时会立即释放它所占用的资源。 3、属性设置 属性设置是由一定函数来完成的,通常调用pthread_attr_init函数进行初始化。设置绑定属性的函数为pthread_attr_setscope,设置分离属性的函数是pthread_attr_setdetachstate,设置线程优先级的相关函数pthread_attr_getschdparm(获取线程优先级)和pthread_attr_setschedparam (设置线程优先级)。在设置完成属性后,调用pthread_creat函数创建线程。 线程属性初始化: #include int pthread_attr_init (pthread_attr_t *attr) attr:线程属性 返回值:成功0,错误-1。 设置绑定属性: #include pthread_attr_setscope(pthread_attr_t *attr, init scope) attr:线程属性 scope:PTHREAD_SCOPE_SYSTEM(绑定) PTHREAD_SCOPE_PRCESS(非绑定) 返回值:成功0,错误-1。 设置分离属性: #include pthrea

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

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

相关文章

oracle group by 多类别_python数据关系型图表散点图系列多数据系列

多数据系列多数据系列的散点图需要使用不同的填充颜色(fill)和数据点形状(shape)这两个视觉特征来表示数据系列;绘制多数据系列散点图多数据系列散点图就是在单数据系列上添加新的数据系列;使用不同的填充颜色或形状区分数据系列;plotnine绘制…

图片和视频压缩例子

/*** 视频压缩 需要jave jar 包。到网上下载即可 * * param source 需要压缩的视频* param targetPath 压缩的目标路径* return*/public static boolean compressVideo(File source, String targetPath) {System.out.println("source:" source);System.out.println…

Web 开发中应用 HTML5 技术的10个实例教程

HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究。借助尖端功能,技术和 API,HTML5 允许你创建响应性、创新性、互动性以及令人惊叹的漂亮网站。更进一步,你也可以…

linux ptrace 内核源码分析,linux 3.5.4 ptrace源码分析分析(系列一)

ptrace是linux系统中为了调试专门设立的一种系统调用。要想调试调试一个进程,有两种方式:PTRACE_TRACEME和PTRACE_ATTACH。这两种方式的主要区别可以概括为:PTRACE_TRACEME是子进程主动申请被TRACE。而PTRACE_ATTACH是父进程自己要attach到子…

在单元测试中访问私有字段

首先,让我大声说一下,您需要将代码设计为可测试的,以便通过公共方法测试私有字段。 但是,(“ buts”是人们仍在编程而不是计算机本身的原因,所以在这里很高兴)有时您想要并且应该更改一些私有字…

【LeetCode题解】160_相交链表

目录 160_相交链表描述解法一:哈希表思路Java 实现Python 实现解法二:双指针(推荐)思路Java 实现Python 实现160_相交链表 描述 编写一个程序,找到两个单链表相交的起始节点。 例如,下面的两个链表&#xf…

maya崩溃自动保存路径_maya 使用swig将插件编译成pyd,无缝使用内置数据实现加速计算模块...

前言:原本目的是想寻求一种方式来对cpu计算密集型代码部分进行加速替代,但是maya中mll插件的插件套路在传递参数上会占用大量的io,对于数据比较大的部分也会有相当消耗。如果全部写在c部分又感觉缺乏灵活性,所以琢磨的一种可以在p…

VS2010中预处理器定义

vs2010下的预处理器定义就是使该预定义下的宏定义在每个文件中都包括,便于跨平台编码格式或者其他的一些设置,便于处理,值得注意的是工程移植的时候需要考虑预处理定义否则代码运行的环境可能不同,导致结果出错。 详解&#xff1a…

Slip.js – 在触摸屏上实现 Swipe 对列表重新排序

Slip.js 是一个很小的 JavaScript 库,用于实现对触摸屏的互动 Swipe 和对元素重新排序列表(Reordering)。Slip.js 没有任何的依赖,你可以通过自定义 DOM 事件实现重新排序交互。 您可能感兴趣的相关文章Pace.js – 页面加载进度自…

suse10 linux安装,SuSE10.2 安装手记

SuSE10.2 安装手记发布时间:2007-04-05 00:31:51来源:红联作者:Reference1. 添加安装源SuSE提供了多种安装源的管理,你可以通过Yast方便的添加和删除各种安装源。(1) 本地安装源:YaST -> Software -> Installation Source -> Add -> Local D…

构建和运行Java 8支持

尚未提供对Java 8的Eclipse支持。 如果要使用它,则必须构建它。 Eclipsepedia的JDT Core / Java8页面包含有关使用Eclipse Java开发工具 (JDT)中不断发展的Java 8支持源来设置开发环境的说明。 说明中缺少一些内容; 待会儿我会回圈…

django异常日志_【python小随笔】Django+错误日志(配置Django报错文件指定位置)...

1: 自定义日志文件.py----------几个文件需要创建日志,就需要重新定义几份#1定义一个日志文件 创建一个操作日志对象loggerfile_1 logging.FileHandler(text_1.log, a, encodingutf-8) # text_1.log 定义日志文件名fmt logging.Formatter(fmt"%(asctime)s - %…

Django之管理权限

什么是权限: 谁对什么资源能做什么操作。 管理权限的实现有很多,这里实现一个最简单的管理权限的实现方式:rbac ( role based access control ) 实现的一个基本思路: 一张user用户表,一张role…

狄克斯特拉 Dijkstra 算法 C#实现

今天在看《算法图解》,看了加权最小路径算法,决定用代码实现一下。 首先是画有向图,在网上找了一下,有不错的开源软件graphviz,该源代码托管在GitLab上。该软件是一个图形可视化软件。 画了一个有向图如下: 画图用的代…

So Easy! 让开发人员更轻松的工具和资源

这篇文章给大家分享让开发人员生活更轻松的免费工具和资源。所以,如果你正在寻找一些为迅速解决每天碰到的设计和开发问题的工具和资源,不要再观望,试试这些工具吧。这些奇妙的工具不仅会加快您的生产,也让你的工作质量提升。 您可…

Java 8:按集合分组

在继续阅读Venkat Subramaniam的“ Java函数式编程 ”时,我到达了介绍Stream#collect函数的那部分。 我们想收集一个人,按年龄分组,并返回一张方便的(年龄->人名)地图。 要刷新,这是Person…

android linux截图库,Android中截图(surfaceView)源码

总结了一个方法,实现了在Android当前Activity的截图,本人测试确实通过了,不过有朋友说截出来的图是黑色的,不能看。我心想,这没有问题啊,相同的代码我就可以执行通过,并没有没有在意这个问题。可…

xmta温度控制仪说明书_XMT系列数显温度控制器使用说明书

测温元件名称分度号测温范围℃分辩率热电偶镍铬—铜镍E(EA—2)0 - 300、0 - 400、0 - 6001℃镍铬—镍硅K(EU—2)0-400、0-600、0-800、0-1300铂铑—铂S(LB—3)0 - 1600、700 - 1600热电阻铜电阻Cu50(G)-50-150、0-50、0-100、0-1500.1℃铂电阻Pt100(BA1、BA2)-199 - 199、0 - 1…

WARNING: 'aclocal-1.14' is missing on your system.

源码安装zabbix agent时进行到make install时报如下错误: WARNING: aclocal-1.14 is missing on your system.You should only need it if you modified acinclude.m4 orconfigure.ac or m4 files included by configure.ac.The aclocal program is part of the GNU…

23套新鲜出炉的网站和手机界面 PSD 素材

Web 用户界面,移动用户界面和线框套件对设计师很有用,因为这些套件让他们使用快速和有效的方式复制用户界面。这些类型的工具包提供了一个基本的用户界面元素,用于它们需要制作的网站或软件模型。 在这篇文章中,我们展示的是自由和…