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

网站建设计划书模板泰安网站制作推广

网站建设计划书模板,泰安网站制作推广,施工企业会计分录大全,域名注册最后是网站Linux——条件变量 目录 一、概念 1.1 基本概念 1.2 条件变量的作用 1.3 条件变量的使用 二、基本操作 一、概念 条件变量是一种用于多线程编程中的同步机制,它允许线程在某个条件不满足时进入等待状态,并在条件满足时被唤醒。 1.1 基本概念 如…

Linux——条件变量

目录

一、概念

1.1 基本概念

1.2  条件变量的作用

1.3  条件变量的使用

二、基本操作


一、概念

条件变量是一种用于多线程编程中的同步机制,它允许线程在某个条件不满足时进入等待状态,并在条件满足时被唤醒。

1.1 基本概念

如果说互斥锁是用于同步线程对共享数据的访问的话,那么条件变量就是用于在线程之间同步共享数据的值。条件变量提供了一种线程间的通知机制,当共享数据达到某个值的时候,唤醒等待这个共享数据的线程。实现条件变量必须使用互斥锁,因为互斥锁只能用于保护临界资源,而条件变量可以用来通知线程某个条件已经满足。

1.2  条件变量的作用

  • 减少竞争:在没有条件变量的情况下,线程可能需要不断轮询某个条件是否满足,这会浪费CPU资源。条件变量允许线程在条件不满足时进入休眠状态,直到被其他线程唤醒

  • 线程同步:条件变量可以用来同步线程的执行顺序。例如,在生产者-消费者模型中,消费者线程可以在队列为空时等待,生产者线程在生产产品后唤醒消费者。

1.3  条件变量的使用

条件变量的使用通常涉及以下几个步骤:

  • 初始化:可以通过静态初始化(pthread_cond_t cond = PTHREAD_COND_INITIALIZER)或动态初始化(pthread_cond_init())来创建条件变量。

  • 等待条件:线程通过pthread_cond_wait()函数阻塞,等待条件变量,该函数会释放互斥锁,并将线程挂起,直到被其他线程唤醒。

  • 唤醒线程:当条件满足时,eg从键盘输入数据时,其他线程可以通过pthread_cond_signal()唤醒一个等待的线程,或者通过pthread_cond_broadcast()唤醒所有等待的线程。

  • 销毁:条件变量使用完毕后,可以通过pthread_cond_destroy()销毁。

二、基本操作

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>pthread_mutex_t mutex;
pthread_cond_t cond;//声明char buff[128] = { 0 };//全局变量,存放键盘输入的数据void* funa(void* arg)
{while (1){                                            pthread_mutex_lock(&mutex);pthread_cond_wait(&cond, &mutex);//阻塞pthread_mutex_unlock(&mutex);if (strncmp(buff, "end", 3) == 0){break;}printf("funa read:%s\n", buff);}
}
void* funb(void* arg)
{while (1){pthread_mutex_lock(&mutex);pthread_cond_wait(&cond, &mutex);//阻塞,等着被唤醒pthread_mutex_unlock(&mutex);if (strncmp(buff, "end", 3) == 0){break;}printf("funb read:%s\n", buff);}
}
int main()
{pthread_mutex_init(&mutex, NULL);//初始化互斥锁pthread_cond_init(&cond, NULL);//条件变量初始化pthread_t ida, idb;//接受俩个线程pthread_create(&ida, NULL, funa, NULL);//启动pthread_create(&idb, NULL, funb, NULL);while (1){fgets(buff, 128, stdin);//从键盘获取if (strncmp(buff, "end", 3) == 0){pthread_cond_broadcast(&cond);//一起唤醒俩个线程//&cond 是条件变量的地址,表示要操作的条件变量。break;}else{pthread_cond_signal(&cond);//只唤醒一个}}pthread_join(ida, NULL);//等待俩个线程结束pthread_join(idb, NULL);pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);//销毁exit(0);
}

 

  • pthread_mutex_t mutex:声明一个互斥锁,用于保护共享资源(如 buff)。

  • pthread_cond_t cond:声明一个条件变量,用于线程间的同步。

  • pthread_mutex_lock(&mutex):获取互斥锁,确保对共享资源的访问是线程安全的。

  • 条件变量必须与互斥锁一起使用,以确保对共享资源的访问是线程安全的。

俩个线程不能同时操作,所以要加互斥锁,保证他俩只能有一个在等待

http://www.dtcms.com/wzjs/90526.html

相关文章:

  • 安徽网站建设哪家有网推是什么
  • 网站开发制作计算器如何在百度上做广告
  • 网站备案号密码找回seo描述快速排名
  • 兰州响应式网站建设乐事薯片软文推广
  • 建设通网站源码百度有专做优化的没
  • 国外网站可以访问吗网站网络推广运营
  • 网站建设广告图片搜索引擎营销的特点是什么
  • 安徽省建设工程测试研究院网站h5制作
  • 深圳软件开发工资一般多少站内优化主要从哪些方面进行
  • 电子商务网站建设与管理试题及答案发外链的论坛
  • 广东省人民政府西安seo网站排名
  • 中国建设银行昆山支行网站西安自助建站
  • 我的网站wordpress百度seo是啥
  • 网站后台运营怎么做网络销售好不好做
  • html企业网站系统seo的重要性
  • estore wordpressseo怎么刷排名
  • 网站需要的栏目网络营销的方法有哪些
  • 苏州企业如何建网站湘潭网站设计外包公司
  • 高清品牌网站设计建设seo查询网站是什么
  • 成都h5网站建设推广网上国网
  • 如何入驻亚马逊跨境电商百度关键词快速优化
  • 网站数据库结构被删了怎么办软文宣传
  • 2015手机版网站制作外链代发平台
  • 专业外贸网站建设百度搜不干净的东西
  • 酒店网站开发合同范本深圳关键词优化公司哪家好
  • 带端口的服务器怎么做网站线上宣传渠道
  • dw做网站 如何设置转动百度在线
  • 设计师怎么做响应式网站搜狗搜索推广
  • 专业做外贸网站建设百度信息流投放方式有哪些
  • 网站绑定微信公众号线上推广app