欢迎来到天天文库
浏览记录
ID:50319260
大小:646.00 KB
页数:27页
时间:2020-03-08
《嵌入式应用程序设计 教学课件 华清远见嵌入式学院 穆煜 第5章 嵌入式Linux多线程编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、嵌入式应用程序设计第5章嵌入式Linux多任务编程第1章搭建嵌入式Linux开发环境第2章嵌入式文件I/O编程第3章嵌入式Linux多任务编程第4章嵌入式Linux进程间通行第5章嵌入式Linux多线程编程第6章嵌入式Linux网络编程第7章Qt图形编程第8章嵌入式Linux设备驱动编程第9章Qt聊天项目设计课程安排:25.1线程基本编程5.2线程之间的同步与互斥5.3线程属性5.4多线程实验5.5小结5.6思考与练习本章课程:31.1.1嵌入式系统简介计算机、通信、消费电子的一体化趋势嵌入式系统定义:嵌入式系统是指以应用为中心,以计算机技
2、术为基础,软件硬件可剪裁,适应应用系统,对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。硬件+软件硬件:由嵌入式微处理器、外围硬件设备组成软件:括底层系统软件和用户应用软件嵌入式系统应用领域:5.1线程基本编程4创建线程实际上就是确定调用该线程函数的入口点,这里通常使用的函数是pthread_create()。在线程创建之后,就开始运行相关的线程函数,在该函数运行完之后,该线程也就退出了,这也是线程退出的一种方法。另一种退出线程的方法是使用函数pthread_exit(),这是线程的主动行为。pthread_join()可以用于将
3、当前线程挂起来等待线程的结束。这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源就被收回。pthread_cancel()向其他线程发送终止信号,但在被取消的线程的内部需要调用pthread_setcancel()函数和pthread_setcanceltype()函数设置自己的取消状态。5.1线程基本编程5phtread_create()函数语法:phtread_exit()函数语法:5.1线程基本编程6phtread_join()函数语法:phtread_cancel()函数语法:
4、5.1线程基本编程75.2.1互斥锁线程控制互斥锁是用一种简单的加锁方法来控制对共享资源的原子操作。互斥锁只有两种状态,也就是上锁和解锁,可以把互斥锁看作某种意义上的全局变量。在同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行操作。若其他线程希望上锁一个已经被上锁的互斥锁,则该线程就会挂起,直到上锁的线程释放掉互斥锁为止。互斥锁可以分为快速互斥锁、递归互斥锁和检错互斥锁。这三种锁的区别主要在于其他未占有互斥锁的线程在希望得到互斥锁时是否需要阻塞等待。快速锁是指调用线程会阻塞直至拥有互斥锁的线程解锁为止。递归互斥锁能
5、够成功地返回,并且增加调用线程在互斥上加锁的次数,而检错互斥锁则为快速互斥锁的非阻塞版本,它会立即返回并返回一个错误信息。默认属性为快速互斥锁。5.2线程之间的同步和互斥85.2.1互斥锁线程控制互斥锁的基本操作:互斥锁初始化:pthread_mutex_init()互斥锁上锁:pthread_mutex_lock()互斥锁判断上锁:pthread_mutex_trylock()互斥锁接锁:pthread_mutex_unlock()消除互斥锁:pthread_mutex_destroy()5.2线程之间的同步和互斥95.2.1互斥锁线程控
6、制pthread_mutex_init()函数语法:5.2线程之间的同步和互斥105.2.1互斥锁线程控制pthread_mutex_lock()函数语法:5.2线程之间的同步和互斥115.2.2信号量线程控制信号量也就是操作系统中所用到的PV原子操作,它广泛用于进程或线程间的同步与互斥。信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。PV原子操作是对整数计数器信号量sem的操作。一次P操作使sem减一,而一次V操作使sem加一。进程(或线程)根据信号量的值来判断是否对公共资源具有访问权限。当信号量sem的值大于等于零时,
7、该进程(或线程)具有公共资源的访问权限;相反,当信号量sem的值小于零时,该进程(或线程)就将阻塞直到信号量sem的值大于等于0为止。5.2线程之间的同步和互斥125.2.2信号量线程控制PV原子操作主要用于进程或线程间的同步和互斥这两种典型情况。5.2线程之间的同步和互斥互斥同步135.2.2信号量线程控制Linux实现了POSIX的无名信号量,主要用于线程间的互斥与同步。这里主要介绍几个常见函数。sem_init()用于创建一个信号量,并初始化它的值。sem_wait()和sem_trywait()都相当于P操作,在信号量大于零时它们都
8、能将信号量的值减一,两者的区别在于若信号量小于零时,sem_wait()将会阻塞进程,而sem_trywait()则会立即返回。sem_post()相当于V操作,它将信号量的值加
此文档下载收益归作者所有