当前位置: 首页 > wzjs >正文

嘉兴优化网站公司东莞集团网站建设

嘉兴优化网站公司,东莞集团网站建设,建个网站平台需要多少钱,怎么打广告宣传自己的产品目录 条件变量基本原理 初始化条件变量:pthread_cond_init 等待条件变量 :pthread_cond_wait 唤醒所有等待线程:pthread_cond_broadcast 销毁条件变量:pthread_cond_destroy 示例代码 条件变量基本原理 条件变量&#xff08…

目录

条件变量基本原理

初始化条件变量:pthread_cond_init

等待条件变量 :pthread_cond_wait

唤醒所有等待线程:pthread_cond_broadcast

销毁条件变量:pthread_cond_destroy

示例代码


条件变量基本原理

        条件变量(Condition Variable)是多线程编程中用于线程同步的一种机制,它允许线程在某个条件满足时被唤醒。
        条件变量通常与互斥锁配合使用。线程在检查某个条件是否满足之前,先获取互斥锁以保护共享资源。如果条件不满足,线程会释放互斥锁并在条件变量上等待。当其他线程修改了共享资源使得条件满足时,它会通知在该条件变量上等待的线程。等待的线程被唤醒后,会重新获取互斥锁,然后检查条件是否真的满足(因为可能存在虚假唤醒,即线程被唤醒但条件实际上并未满足)。

初始化条件变量:pthread_cond_init

  • 函数原型
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
  • 功能:初始化一个条件变量。
  • 参数
    • cond:指向要初始化的条件变量的指针。
    • attr:用于指定条件变量的属性,通常设为 NULL 使用默认属性。
  • 返回值:成功时返回 0,失败时返回非零错误码。

等待条件变量 :pthread_cond_wait

  • 函数原型
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
  • 功能:使调用线程在条件变量 cond 上等待。调用该函数前,线程必须已经获取了互斥锁 mutex。函数会自动释放互斥锁,并将线程置于等待状态,直到条件变量被其他线程通过 pthread_cond_signal 或 pthread_cond_broadcast 唤醒。唤醒后,线程会重新获取互斥锁。
  • 参数
    • cond:指向要等待的条件变量的指针。
    • mutex:指向与条件变量关联的互斥锁的指针。
  • 返回值:成功时返回 0,失败时返回非零错误码。

唤醒一个等待线程:pthread_cond_signal

  • 函数原型
int pthread_cond_signal(pthread_cond_t *cond);
  • 功能:唤醒在条件变量 cond 上等待的一个线程。如果有多个线程在等待,具体唤醒哪个线程是由系统决定的。
  • 参数cond:指向要操作的条件变量的指针。
  • 返回值:成功时返回 0,失败时返回非零错误码。

唤醒所有等待线程:pthread_cond_broadcast

  • 函数原型
int pthread_cond_broadcast(pthread_cond_t *cond);
  • 在条件变量 cond 上等待的所有线程。
  • 参数cond:指向要操作的条件变量的指针。
  • 返回值:成功时返回 0,失败时返回非零错误码。

销毁条件变量:pthread_cond_destroy

  • 函数原型
int pthread_cond_destroy(pthread_cond_t *cond);
  • 功能:销毁一个已初始化的条件变量,释放相关资源。在销毁条件变量之前,应确保没有线程在该条件变量上等待。
  • 参数cond:指向要销毁的条件变量的指针。
  • 返回值:成功时返回 0,失败时返回非零错误码。

示例代码

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int ready = 0;void* waiter(void* arg) {pthread_mutex_lock(&mutex);while (!ready) {printf("Waiting for condition...\n");pthread_cond_wait(&cond, &mutex);}printf("Condition met. Continuing...\n");pthread_mutex_unlock(&mutex);return NULL;
}void* signaler(void* arg) {pthread_mutex_lock(&mutex);ready = 1;printf("Setting condition...\n");pthread_cond_signal(&cond);pthread_mutex_unlock(&mutex);return NULL;
}int main() {pthread_t thread1, thread2;pthread_create(&thread1, NULL, waiter, NULL);pthread_create(&thread2, NULL, signaler, NULL);pthread_join(thread1, NULL);pthread_join(thread2, NULL);pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);return 0;
}

代码说明:

  • waiter 线程获取互斥锁后,检查 ready 条件。如果 ready 为 0,它会调用 pthread_cond_wait 等待条件变量,并释放互斥锁。
  • signaler 线程获取互斥锁,设置 ready 为 1,然后调用 pthread_cond_signal 唤醒 waiter 线程,最后释放互斥锁。
  • waiter 线程被唤醒后,重新获取互斥锁,检查 ready 条件,发现条件满足后继续执行。最后,主线程等待两个线程完成,并销毁互斥锁和条件变量。
http://www.dtcms.com/wzjs/834908.html

相关文章:

  • 宜宾建功路桥建设有限公司网站响应式网站做多大的尺寸
  • 宿州建设网站公司哪家好在线设计平台 类似pixao
  • 网站站外推广的内外链接怎么做宣传页面怎么制作
  • 用 可以做网站软件吗搭建网站多少钱
  • 郑州高端网站建设是什么意思新公司网站建设费用怎么入账
  • 锦州网站建设怎样保定网站推广公司
  • 网站图片的作用seo竞价网站建设
  • 网站建设规划书实训报告用dw做的网站怎样弄上网上
  • 龙采科技做网站多少钱扁平化设计 网站
  • 推广公司的网站可以采取哪些方式毕设做微课资源网站设计可以吗
  • shopify可以做企业网站嘛企业网站内容建设 知乎
  • 腾讯域名怎么建设网站花钱做网站不给源码
  • 网站建设公司怎么样广水网页定制
  • 手机端移动网站建设网站系统建设招标文件
  • 网站建设管理工作经验介绍找深圳网站建设
  • 上海网站建设 网站开发建筑施工证查询网站
  • 伊宁市建设局网站有什么做ppt的网站吗
  • dede做网站地图国外上国内网站很慢
  • 一般网站建设需要哪些东西福田网站建设seo信科
  • 民治做网站的公司广告装饰 技术支持 东莞网站建设
  • wordpress站点临时关闭装饰公司怎么做网站
  • 简述网站制作基本流程华宇万户网络
  • 不会技术怎么做公司网站网站安全狗服务名
  • 做智能网站宝塔网站建设跳转微信可打开
  • 网站建设哈尔滨app开发2wordpress如何更换空间
  • 企业网站免费建站谷歌网站优化工具
  • 龙岩网站建设方案书中国制造网简介
  • 网站开发的认知wordpress分类缩略图
  • 上海高端工作室网站佛山市企业网站建设报价
  • 电商网站可以用dw做网站代码上传后无法打开