嵌入式Linux高级编程--05posix_线程编程.ppt_第1页
嵌入式Linux高级编程--05posix_线程编程.ppt_第2页
嵌入式Linux高级编程--05posix_线程编程.ppt_第3页
嵌入式Linux高级编程--05posix_线程编程.ppt_第4页
嵌入式Linux高级编程--05posix_线程编程.ppt_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式Linux高级编程,Linux线程编程,Linux线程概述,进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。 线程通常叫做轻型的进程。线程是在共享内存空间中并发执行的多道执行路径,他们共享一个进程的资源。 因为线程和进程比起来很小,所以相对来说,线程花费更少的CPU资源。,图1 进程与线程的关系,创建线程,#include int pthread_create(pthread_t *thread, pthread_attr_t *attr,void *(*start_routine)(void *),void *arg) 功能:创建线程。 返回值:成功返

2、回0。 参数: thread:线程标识符(唯一性) attr:线程属性设置 start_routine:线程函数起始地址 arg:传递给start_routine的参数 注意:由于pthread.h不是Linux系统默认的库,连接时需要使用库libpthread.a gcc -o pthread -lpthread pthread.c,#include #include #include #include #include pthread_t ntid; void printids(const char *s) pid_t pid; pthread_t tid; pid = getpid();

3、 tid = pthread_self(); printf(%s pid %u tid %u (0 x%x)n,s,(unsigned int)pid,(unsigned int)tid,(unsigned int)tid); void *thr_fn(void *arg) printids(new thread:); return (void *)0); int main() int err; err = pthread_create( ,线程退出,#include void pthread_exit( void *retval ) 功能:线程主动退出。 参数: retval:pthread

4、_exit调用者线程的返回值,可由其他函数和pthread_join来检测获取。 #include int pthread_cancel(pthread_t thread); 功能:取消指定线程。 返回值:成功返回0。 区别:pthread_exit结束自己,pthread_cancel结束别人,等待线程,#include int pthread_join(pthread_t th,void *thread_return) 功能:等待指定线程。 返回值:成功返回0。 参数: th:等待线程的标识符 thread_return:用户定义指针,用来存储被等待线程的返回值。,#include #in

5、clude #include #include void *thr_fn1(void *arg) printf(thread 1 returning n); return (void*)1; void * thr_fn2(void *arg) printf(thread 2 exitingn); pthread_exit(void *)2); void *thr_fn3(void *arg) while(1) printf(thread 3 writingn); sleep(1); int main() pthread_t tid; void *tret; pthread_create( ,线

6、程同步,互斥量(mutex) 多个线程同时访问共享数据时可能会冲突,这跟前面讲信号时所说的可重入性是同样的问题。比如两个线程都要把某个全局变量增加1,这个操作在某平台需要三条指令完成: 从内存读变量值到寄存器 寄存器的值加1 将寄存器的值写回内存 假设两个线程在多处理器平台上同时执行这三条指令,则可能导致下图所示的结果,最后变量只加了一次而非两次。,互斥量(mutex),mutex是一种简单的加锁的方法来控制对共享资源的访问。在同一时刻只能有一个线程掌握某个互斥上的锁,拥有上锁状态的线程能够对共享资源进行访问。若其他线程希望上锁一个已经被上了互斥锁的资源,则该线程挂起,直到上锁的线程释放互斥锁

7、为止。 互斥锁的操作主要包括以下几个步骤: 互斥锁初始化:pthread_mutex_init 互斥锁上锁:pthread_mutex_lock 互斥锁解锁:pthread_mutex_unlock 消除互斥锁:pthread_mutex_destroy,互斥量(mutex),#include int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr); 功能:初始化锁。 返回值:成功返回0。 #include int pthread_mutex_lock(pthread_mutex_

8、t *mutex); 功能:访问资源,锁资源 返回值:成功返回0。,#include int pthread_mutex_unlock(pthread_mutex_t *mutex); 功能:解锁 返回值:成功返回0,互斥量(mutex),互斥量(mutex),#include int pthread_mutex_destroy(pthread_mutex_t *mutex); 功能:销毁锁 返回值:成功返回0,#include #include #include #define NLOOP 5000 int counter; void *doit(void *); int main(int argc, char *argv) pthread_t tidA, tidB; pthread_create( ,#include #include #include #define NLOOP 5000 int counter; pthread_mutex_t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论