- 1、本文档共101页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM Lux多线程开发实例(2010-5-13)
第7章 ARM Linux多线程开发实例 7.1 Linux多线程相关API 7.2 信号灯 7.3 互斥量 7.4 条件变量 7.1 Linux多线程相关API Linux有多线程开发的 Pthread 库支持。 最基本概念:线程、互斥锁、条件。 ①线程操作又分线程的创建、退出、等待。 ②互斥锁则包括 4 种操作:创建、销毁、加锁和解锁。 ③条件操作有 5 种操作:创建、销毁、触发、广播和等待。其他的一些线程扩展概念,如信号灯等,都可以通过上面的三个基本元素的基本操作封装出来。 表 7.1. 线程函数列表 7.1.1 线程的创建 1. pthread_create函数 pthread_create用于创建一个新的线程。其函数原型为: #include?pthread.h int?pthread_create(pthread_t?*restrict?tidp,const?pthread_attr_t?*restrict?attr,?void?*(*start_rtn)(void),void?*restrict?arg); 返回值:若是成功建立线程返回0,否则返回错误的编号。 函数说明:第1个参数为指向要创建的线程的线程id指针,第2个参数用来设置线程属性,第3个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。 这里,函数thread 不需要参数,所以最后一个参数设为空指针。第2个参数也设为空指针,这样将生成默认属性的线程。当创建线程成功,函数返回0,否则失败,常见的错误返回代码为EAGAIN 和EINVAL。 EAGAIN表示系统限制创建新的线程,例如线程数目过多了; EINVAL表示第2个参数代表的线程属性值非法。创建线程成功后,新创建的线程则运行参数三和参数四确定的函数,原来的线程则继续运行下一行代码。 例 7.1 线程的创建(gettid.c) #include pthread.h void printids(const char *s) { printf(“%s pid:%u tid:%u \n“, getpid(),pthread_self()); } void *thr_fn(void *arg) { printf (“new thread: “); } 进程的编译需要要加上参数 –lpthread,否则提示找不到函数的错误。 具体编译方法是: gcc –lpthread –o gettid gettid.c 运行结果为 main thread: pid 14954 tid 134529024 new thread: pid 14954 tid 134530048 2.pthread_exit 函数 线程是依进程而存在的,当进程终止时,线程也就终止了。当然也有在不终止整个进程的情况下停止它的控制流。 (1)线程只是从启动例程中返回,返回值是线程的退出码。 (2)线程可以被同一进程中的其他线程取消。 (3)线程调用pthread_exit. pthread_exit :是一个线程的结束。 两种途径:当函数结束了,调用它的线程也就结束了;另一种方式是通过函数pthread_exit 来实现。其函数原型为: void pthread_exit (void *__retval) 唯一的参数是函数的返回代码,只要pthread_join 中的第二个参数thread_return 不是NULL,这个值将被传递给thread_return。需要说明的是,一个线程不能被多个线程等待,否则第一个接收到信号的线程成功返回,其余调用pthread_join 的线程则返回错误代码ESRCH。 例 7.2 线程终止 #include pthread.h #include string.h void *thr_fn1(void *arg) { printf(“thread 1 returning\n”); return((void *)1); } void *thr_fn2(void *arg) { printf(“thread 2 exiting\n”); return((void *)2); } int main() { pthread_t tid1,tid2; void *tret; pthread_create(tid1,NULL,thr_fn1,NULL); pthread_create(tid2,NULL,thr_fn2,NULL); pthread_join(tid1,tret); printf(“thread 1 exit code %d\n”,(i
您可能关注的文档
最近下载
- 视觉与艺术智慧树知到期末考试答案章节答案2024年西安交通大学.docx
- 2024年四川省安全员《B证》考试题库及答案.doc VIP
- 《全国统一电力市场发展规划蓝皮书》.pdf
- 黄冈360°定制密卷一年级上册数学人教版.pdf
- 工程量清单编制中存在问题剖析.doc VIP
- 13SR425 室外热力管道检查井.docx VIP
- 山东省实验中学2024—2025学年高二上学期期中考试语文试题(解析版).docx VIP
- 石油和天然气的开采安全知识培训说课课件PPT.pptx VIP
- 综合管理部年度工作总结PPT.pptx VIP
- 大学日语 发展篇(西安交通大学)中国大学MOOC慕课章节测验答案(课程ID:1206146813).pdf
文档评论(0)