进程与线程.ppt

  1. 1、本文档共104页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程与线程资料

* 条件变量检测 条件检测在互斥锁的保护下进行 如果条件为假,一个线程自动阻塞 若另一个线程改变了条件,它发信号给关联的条件变量,唤醒一个或多个等待它的线程,重新获得互斥锁,重新评价条件 * 条件变量的初始化 声明条件变量:pthread_cond_t 类型 使用前必须初始化,有两种方法初始化方法 静态方式 pthread_cond_t condition=PTHREAD_COND_INITIALIZER 动态方式 int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) 被创建的条件变量ID通过 参数返回给调用线程 该方法允许设置条件变量属性 * 条件变量的销毁 函数原型 int pthread_cond_destroy(pthread_cond_t *cond); 功能说明 销毁指定条件变量,同时释放为其分配的资源 * 条件变量的等待 函数原型 int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t mytex, const struct timespec *abstime); 说明 阻塞调用线程,直到满足特定的条件 当该线程运行时,会被加锁,阻塞时会自动解锁 当收到信号唤醒线程时,会被线程自动上锁当线程完成更新共享数据后,开发者有责任解锁 这里的互斥锁必须是普通锁或者适应锁 调用前必须由本线程加锁,激活前要保持锁是锁定状态 * 条件变量的激活 函数原型 int pthread_cond_signal(pthread_cond_t *cond); int pthread_cond_broadcast(pthread_cond_t *cond); 说明 用于通知(唤醒)等待在条件变量上的另一线程 在被加锁后被调用,在完成pthread_cond_wait()运行后必须解锁 二者区别 pthread_cond_signal()激活一个等待该条件的线程 pthread_cond_broadcast()激活所有等待的线程 如果多于一个线程处于阻塞状态,应该用pthread_cond_broadcast()代替pthread_cond_signal() * 条件变量等待与激活使用说明 如果在调用pthread_cond_wait()前先调用pthread_cond_signal(),将出现逻辑错误 当使用上述函数时,必须正确的加锁和解锁 在调用pthread_cond_wait()之前没有成功加锁mutex会导致线程不会阻塞 在调用 pthread_cond_signal()后没有成功解锁mutex,会导致pthread_cond_wait()一直运行 (保持线程阻塞) * 条件变量示例 * 条件变量示例 * 条件变量示例 * 条件变量示例 * 条件变量示例 输出结果 inc_count(): thread 0, count = 1, unlocking mutex Starting watch_count(): thread 2 inc_count(): thread 1, count = 2, unlocking mutex inc_count(): thread 0, count = 3, unlocking mutex inc_count(): thread 1, count = 4, unlocking mutex inc_count(): thread 0, count = 5, unlocking mutex inc_count(): thread 0, count = 6, unlocking mutex inc_count(): thread 1, count = 7, unlocking mutex inc_count(): thread 0, count = 8, unlocking mutex inc_count(): thread 1, count = 9, unlocking mutex inc_count(): thread 0, count = 10, unlocking mutex inc_count(): thread 1, count = 11, unlocking mutex inc_count(): thread 0, count = 12 Threshold reached. inc_count(): thread 0, count = 12, unlocking mut

文档评论(0)

wyjy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档