posix线程的条件等待.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
posix线程的条件等待

posix线程的条件等待 Linux POSIX线程操作 在N800上开发有一段时间了,总结一下线程操作。 1. 头文件 #include pthread.h 编译的时候必须加上 -lpthread 选项 2. 创建线程 pthread_create(线程ID,NULL,ThreadFun,传递的参数); pthread_join(pd,NULL):挂起主线程直到线程pd执行结束; eg: void *ThreadFun(void *p) // 线程执行函数 { int *tmp = (int *)p ; printf(%d\n,*tmp); } int main() { pthread_t pd ; int num = 100 ; if( pthread_create(pd,NULL,ThreadFun,num) 0 ) { printf(thread created failed!\n); return -1 ; } pthread_join(pd,NULL) ; // 一直等到线程pd执行结束才往下执行 return 0 ; } 3. 线程退出 线程退出有两种方式,一种是让线程函数自己执行直到结束,return返回;另一种方式是在线程函数中调用:pthread_exit(NULL); 4. 线程互斥 为防止多个线程对同一个数据同时进行操作带来的冲突,可利用互斥量,条件变量和信号灯。 A 互斥量 互斥量的数据类型为pthread_mutex_t,在程序中互斥量的操作为: a) 定义一个互斥量,然后进行初始化。 初始化互斥量有两种方式,一种是静态方式,另一种是动态方式: pthread_mutex_t mutex ; 静态方式:mutex = PTHREAD_MUTEX_INITIALIZER;(这是一个宏,定义在pthread.h文件中) 动态方式:pthread_mutex_init(mutex,NULL) ; b) 在访问全局/共享变量时进行加锁解锁操作。 加锁: pthread_mutex_lock(mutex); pthread_mutex_unlock(mutex); ...... 解锁: pthread_mutex_unlock(mutex); c) 销毁互斥量 pthread_mutex_destroy(mutex); 互斥量的属性数据类型为pthread_mutexattr_t。 定义一个互斥量属性: pthread_mutexattr_t attr; 互斥量属性的初始化: pthread_mutexattr_init(attr); 互斥量属性的类型设置: pthread_mutexattr_settype(attr,int kind),其中kind可以为一下值: PTHREAD_MUTEX_FAST_NP:快速型,这种类型也是默认的类型。该线程的行为正如上面所说的。 PTHREAD_MUTEX_RECURSIVE_NP:递归型,如果遇到我们上面所提到的死锁情况,同一线程循环给互斥量上锁,那么系统将会知道该上锁行为来自同一线程,那么就会同意线程给该互斥量上锁。 PTHREAD_MUTEX_ERRORCHECK_NP:错误检测型,如果该互斥量已经被上锁,那么后续的上锁将会失败而不会阻塞,pthread_mutex_lock()操作将会返回EDEADLK。 eg: pthread_mutex_t mutex; pthread_mutexattr_t attr; pthread_mutexattr_init(attr); pthread_mutexattr_settype(attr,PTHREAD_MUTEX_RECURSIVE_NP); pthread_mutex_init(mutex,attr); pthread_mutex_destroy(attr); B 条件变量 条件变量的类型是pthread_cond_t。 如何使用条件变量? 1)声明pthread_cond_t变量后,调用pthread_cond_init()函数,第一个参数为之前声明的变量。第二个参数在Linux中不起作用。 2)声明一个pthread_mutex_t变量,并调用pthread_mutex_init()初始化。 3)调用pthread_cond_signal(),发出信号。如果此时有线程在等待该信号,那么该线程将会唤醒。如果没有,该信号就会别忽略。 4)如果想唤醒所有等待该信号的线程,调用pthread_cond_broadcast()。

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档