预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共16页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

嵌入式Linux高级编程主讲:成宝宗Linux线程编程主讲:成宝宗Linux线程概述进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。线程通常叫做轻型的进程。线程是在共享内存空间中并发执行的多道执行路径,他们共享一个进程的资源。因为线程和进程比起来很小,所以相对来说,线程花费更少的CPU资源。进程用户地址空间线程一线程二线程三图1进程与线程的关系创建线程#include<pthread.h>intpthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*arg)功能:创建线程。返回值:成功返回0。参数:thread:线程标识符(唯一性)attr:线程属性设置start_routine:线程函数起始地址arg:传递给start_routine的参数线程退出#include<pthread.h>voidpthread_exit(void*retval)功能:线程主动退出。参数:retval:pthread_exit调用者线程的返回值,可由其他函数和pthread_join来检测获取。#include<pthread.h>intpthread_cancel(pthread_tthread);功能:取消指定线程。返回值:成功返回0。等待线程#include<pthread.h>intpthread_join(pthread_tth,void**thread_return)功能:等待指定线程。返回值:成功返回0。参数:th:等待线程的标识符thread_return:用户定义指针,用来存储被等待线程的返回值。线程同步1,互斥量(mutex)2,信号量互斥量(mutex)mutex是一种简单的加锁的方法来控制对共享资源的访问。在同一时刻只能有一个线程掌握某个互斥上的锁,拥有上锁状态的线程能够对共享资源进行访问。若其他线程希望上锁一个已经被上了互斥锁的资源,则该线程挂起,直到上锁的线程释放互斥锁为止。互斥锁的操作主要包括以下几个步骤:互斥锁初始化:pthread_mutex_init互斥锁上锁:pthread_mutex_lock互斥锁解锁:pthread_mutex_unlock消除互斥锁:pthread_mutex_destroy互斥量(mutex)#include<pthread.h>intpthread_mutex_init(pthread_mutex_t*mutex,constpthread_mutexattr_t*mutexattr);功能:初始化锁。返回值:成功返回0。#include<pthread.h>intpthread_mutex_lock(pthread_mutex_t*mutex);功能:访问资源返回值:成功返回0。互斥量(mutex)#include<pthread.h>intpthread_mutex_unlock(pthread_mutex_t*mutex);功能:释放资源返回值:成功返回0。#include<pthread.h>intpthread_mutex_destroy(pthread_mutex_t*mutex);功能:取消毁锁返回值:成功返回0。信号量信号量依据取值开关(0与大于0)来控制运行。信号量相关函数包括:sem_initsem_waitsem_postintsem_destroy信号量#include<semaphore.h>intsem_init(sem_t*sem,intpshared,unsignedintvalue);功能:初始化信号量。返回值:成功返回0,错误返回-1。说明:sem:信号量pshared:为0时表示是当前进程局部信号量;非0表示其它进程可以共享该信号量。value:信号量初始值。信号量#include<semaphore.h>intsem_wait(sem_t*sem);功能:实现减1操作,当sem=0则阻塞。返回值:成功返回0,错误返回-1。#include<semaphore.h>intsem_post(sem_t*sem);功能:实现加1操作。返回值:成功返回0,错误返回-1。#include<sem