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

网站页面架构学院网站建设的特色

网站页面架构,学院网站建设的特色,做淘宝差不多的网站吗,seo推广服务哪家好概述 条件变量的作用: 条件变量和互斥量配合使用,主要应用于生产者和消费者问题。 这种问题也是一种临界资源的问题,但与互斥量一文中 "写文件" 这种资源不同。文件是一直存在的临界资源,而生产者的资源不是一直存在…

概述

条件变量的作用:

条件变量和互斥量配合使用,主要应用于生产者和消费者问题。

这种问题也是一种临界资源的问题,但与互斥量一文中 "写文件" 这种资源不同。文件是一直存在的临界资源,而生产者的资源不是一直存在,资源的产生需要一些条件。条件变量实现了在等待生产者时,消费者进入休眠状态,提高运行效率。

条件变量使用方法:

1、初始化互斥量、条件变量

2.1 生产者:加锁互斥量->生产资源->发送信号给条件变量->解锁互斥量

2.2 消费者:加锁互斥量->无资源时等待条件变量->消费资源->解锁互斥量

相关函数

1、初始化

//动态初始化
int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr);
//静态初始化
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

返回值:成功返回0,失败返回错误码

cond:要初始化的条件变量

attr:条件变量属性,NULL代表默认属性

2、销毁 

int pthread_cond_destroy(pthread_cond_t *cond);

返回值:成功返回0,失败返回错误码

cond:要销毁的条件变量

3、等待资源

//等待临界资源,阻塞
int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex);
//等待临界资源,一段时间后退出阻塞
int pthread_cond_timedwait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex,const struct timespec *restrict abstime);

cond:等待哪一个条件变量的信号

mutex:与条件变量搭配使用的互斥量

注意:该函数在没有资源时,会解锁互斥量,并把本线程休眠。当接收到资源时,会解除休眠,并再次把互斥量上锁

4、发送信号 

//单个发送信号,代表资源来了,所有线程竞争该资源
int pthread_cond_signal(pthread_cond_t *cond);
//广播发送信号,代表资源来了
int pthread_cond_broadcast(pthread_cond_t *cond);

cond:要向哪一个条件变量发送信号

注意:当 "发送信号" 比 "等待资源" 早时,"等待资源" 是接收不到信号的,这会导致信号丢失。这意味着当运行到 "等待资源" 时,会进入阻塞,直到第二次 "发送信号" 到来

生产者消费者示例代码

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <pthread.h>
#include <stdlib.h>
pthread_mutex_t mutex;//互斥锁
pthread_cond_t cond;//条件变量
//资源
struct resource{char num;struct resource* pNext;
};
struct resource Head;
struct resource* pTail;
//消费者
void* consumer(void* arg){struct resource* pResource = NULL;while(1){//1.加锁互斥量pthread_mutex_lock(&mutex);//2.无资源时等待条件变量,有资源时不断消耗资源while(Head.pNext == NULL){//while的作用:防止信号为广播时产生惊群效应pthread_cond_wait(&cond,&mutex);}//3.消费资源pResource = Head.pNext;Head.pNext = Head.pNext->pNext;if(Head.pNext == NULL){pTail = &Head;}printf("consumer:num = %d\n",pResource->num);free(pResource);//4.解锁互斥量pthread_mutex_unlock(&mutex);sleep(1);}
}
//生产者
void* producer(void* arg){struct resource* pNew = NULL;int i = 0;while(1){//1.加锁互斥量pthread_mutex_lock(&mutex);//2.生产资源if((pNew = malloc(sizeof(struct resource))) == NULL){printf("malloc err\n");pthread_exit(NULL);}pNew->num = i++;pNew->pNext = NULL;pTail->pNext = pNew;pTail = pNew;printf("producer:num = %d\n",pNew->num);//3.发送信号给条件变量pthread_cond_signal(&cond);//4.解锁互斥量pthread_mutex_unlock(&mutex);sleep(1);}
}
int main(){pthread_t tid;Head.pNext = NULL;pTail = &Head;//初始化互斥锁和条件变量pthread_mutex_init(&mutex,NULL);pthread_cond_init(&cond,NULL);//创建线程if(pthread_create(&tid,NULL,producer,NULL) != 0){perror("pthread_create");pthread_detach(tid);return -1;}if(pthread_create(&tid,NULL,consumer,NULL) != 0){perror("pthread_create");return -1;}while(1);//销毁互斥锁和条件变量pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);return 0;
}

http://www.yayakq.cn/news/711568/

相关文章:

  • 找做网站的wordpress 制作portfolio
  • 网站备案需要准备什么材料做网站一般图片多大
  • 用dw做网站怎么上传到网站上网页界面设计首页
  • 百事可乐网站建设优缺点网站资讯板块的搭建
  • 江西新农村建设权威网站旺道智能seo系统
  • 扫二维码进入个人的购物网站如何做关键词排名优化怎么做
  • 网站备案字号自适应网站怎么做m站
  • 焦作网站开发网站网页设计公司
  • 山西路桥建设集团有限公司网站石家庄外贸网站制作
  • 做化工贸易要用那些网站推广建设读书网站的意义
  • 做自动采集电影网站有什么处罚龙华和龙岗哪个繁华
  • 商务网站开发实验报告网站数据比较
  • 四川网站备案咨询网什么程序做的网站没有index页面
  • 怎么利用360域名做网站阿里网站建设
  • 怎么做个手机版的网站毕业设计代做网站都有哪些
  • 网站建设一点通广州市又恢复48小时核酸检测
  • 广东省住房和建设网站聊城建设工程质量信息网站
  • div网站模板关键词优化 搜索引擎
  • 网站后台首页阿里云Windows建立WordPress
  • 设计师网站赚钱网站建设交印花税嘛
  • 百度移动网站排名网站改版seo建议
  • 网上购物网站开发开题报告在淘宝做网站可以退货退款么
  • 网站开发更新记录网站国内空间价格
  • thinkphp 网站源码做企业网站好的
  • 安徽炒股配资网站开发网站营销型企业销售平台
  • 山门做网站中国石油网站建设在线第三次作业
  • 新乡做网站推广的wordpress 3.9 友情链接
  • 当阳网站建设谷歌seo服务商
  • 友点企业网站管理系统忘记密码做互联网平台要多少钱
  • wordpress改背景搜索引擎优化自然排名的优点