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

photoshop做图网站建设网站费用

photoshop做图网站,建设网站费用,做书的网站有哪些内容,wordpress带手机端条件变量 条件变量本身不是锁,但是它可以造成线程阻塞。通常于互斥锁配合使用。给多线程提供一个会和的场合。 使用互斥量保护共享数据使用条件变量可以造成线程阻塞,等待某个条件的发生,当条件满足的时候解除阻塞。 条件变量的两个动作&a…

条件变量

条件变量本身不是锁,但是它可以造成线程阻塞。通常于互斥锁配合使用。给多线程提供一个会和的场合。

  • 使用互斥量保护共享数据
  • 使用条件变量可以造成线程阻塞,等待某个条件的发生,当条件满足的时候解除阻塞。

条件变量的两个动作:

  • 条件不满足,阻塞线程
  • 条件满足,通知阻塞的线程解除阻塞

 相关函数:

pthread_cond_t cond 定义一个cond条件变量

int pthread_cond_init(pthread_cond_t *restrict cond,
           const pthread_condattr_t *restrict attr);

函数描述:初始化条件变量;

cond 条件变量   attr 条件变量属性,设NULL

函数返回值:成功返回0,失败返回错误号

int pthread_cond_destroy(pthread_cond_t *cond);

函数描述:销毁一个条件变量

int pthread_cond_wait(pthread_cond_t *restrict cond,
           pthread_mutex_t *restrict mutex);

函数描述:条件不满足,引起线程阻塞并解锁

                   条件满足,解除条件阻塞,并加锁

函数参数:cond->条件变量   mutex->互斥锁

int pthread_cond_signal(pthread_cond_t *cond);

函数描述:唤醒至少一个阻塞在该条件变量(cond)上的线程

函数参数:条件变量

函数返回值:成功返回0,失败返回错误号

生产者与消费者模型:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<pthread.h>
//定义一个链表
typedef struct node
{int data;struct node* next;
}node;
//定义一个头节点
node *phead;
//定义一个互斥锁变量
pthread_mutex_t mutex;
//定义一个条件变量
pthread_cond_t cond;
void *producer(void *arg)
{srand(time(NULL));while(1){
//生成一个新的节点node *pNode=NULL;pNode=(node*)malloc(sizeof(node));if(pNode==NULL){printf("malloc error");exit(-1);}
//加锁pthread_mutex_lock(&mutex);pNode->data=rand()%100;//随机生成数printf("p:[%d]\n",pNode->data);
//头插法:pNode->next=phead;phead=pNode;
//解锁pthread_mutex_unlock(&mutex);
//唤醒至少一个线程pthread_cond_signal(&cond);sleep(1);//防止生成过快,导致内存不足}
}
void *consumer(void *arg)
{while(1){pthread_mutex_lock(&mutex);//加锁if(phead==NULL){
//如果头节点为空,那么阻塞并解锁
//如果头节点不为空,接收到pthread_cond_signal的唤醒,解除阻塞并加锁pthread_cond_wait(&cond,&mutex);}node*pNode=phead;printf("c:[%d]\n",pNode->data);
//头节点移动phead=phead->next;
//释放当前节点free(pNode);pNode=NULL;
//解锁pthread_mutex_unlock(&mutex);sleep(2);}
}
int main()
{pthread_mutex_init(&mutex,NULL);//初始化互斥锁pthread_cond_init(&cond,NULL);//初始化条件变量pthread_t thread1;pthread_t thread2;int ret=pthread_create(&thread1,NULL,producer,NULL);if(ret!=0){printf("pthread_create1 error:[%s]\n",strerror(ret));return -1;}ret=pthread_create(&thread2,NULL,consumer,NULL);if(ret!=0){printf("pthread_create2 error:[%s]\n",strerror(ret));return -1;}
//阻塞等待线程结束pthread_join(thread1,NULL);pthread_join(thread2,NULL);
//销毁pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);return 0;
}

多线程core掉的情况:

假如只有一个生产者生产了一个节点,此时会调用pthread_cond_signal通知消费者线程,此时若有多个消费者被唤醒了,则最终只有一个消费者获得锁,然后进行消费,此时会将head置为NULL,然后其他被唤醒的消费者线程会有一个获得锁,然后读取的head的内容会core掉。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<pthread.h>
typedef struct node
{int data;struct node* next;
}node;
node *phead;
pthread_mutex_t mutex;
pthread_cond_t cond;
void *producer(void *arg)
{srand(time(NULL));while(1){node *pNode=NULL;pNode=(node*)malloc(sizeof(node));if(pNode==NULL){printf("malloc error");exit(-1);}pthread_mutex_lock(&mutex);pNode->data=rand()%100;printf("p:[%d]\n",pNode->data);pNode->next=phead;phead=pNode;pthread_mutex_unlock(&mutex);pthread_cond_signal(&cond);sleep(1);}
}
void *consumer(void *arg)
{int n;while(1){n=*(int *)arg;pthread_mutex_lock(&mutex);if(phead==NULL){pthread_cond_wait(&cond,&mutex);}if(phead==NULL){pthread_mutex_unlock(&mutex);//先解锁,因为pthread_cond_wait会加一个锁continue;}node*pNode=phead;printf("c[%d]:[%d]\n",n,pNode->data);phead=phead->next;free(pNode);pNode=NULL;pthread_mutex_unlock(&mutex);sleep(1);}
}
int main()
{int i=0;int arr[5];pthread_mutex_init(&mutex,NULL);pthread_cond_init(&cond,NULL);pthread_t thread1;pthread_t thread2;int ret=pthread_create(&thread1,NULL,producer,NULL);if(ret!=0){printf("pthread_create1 error:[%s]\n",strerror(ret));return -1;}for(;i<5;i++)//创建5个消费者子线程{arr[i]=i;ret=pthread_create(&thread2,NULL,consumer,&arr[i]);if(ret!=0){printf("pthread_create2 error:[%s]\n",strerror(ret));return -1;}}pthread_join(thread1,NULL);pthread_join(thread2,NULL);pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);return 0;
}

 


文章转载自:
http://nemoricole.kzrg.cn
http://skulk.kzrg.cn
http://rhinopharyngitis.kzrg.cn
http://pacchionian.kzrg.cn
http://pervious.kzrg.cn
http://inexpungible.kzrg.cn
http://satisfied.kzrg.cn
http://birthparents.kzrg.cn
http://outgiving.kzrg.cn
http://somersetshire.kzrg.cn
http://rhizomorph.kzrg.cn
http://telautography.kzrg.cn
http://rifampin.kzrg.cn
http://insolence.kzrg.cn
http://bookkeeper.kzrg.cn
http://imprecisely.kzrg.cn
http://campanulate.kzrg.cn
http://swore.kzrg.cn
http://parthenope.kzrg.cn
http://awkwardness.kzrg.cn
http://ius.kzrg.cn
http://decor.kzrg.cn
http://exstrophy.kzrg.cn
http://ritually.kzrg.cn
http://tythe.kzrg.cn
http://ethnobotanical.kzrg.cn
http://galbraithian.kzrg.cn
http://fandangle.kzrg.cn
http://aftertaste.kzrg.cn
http://crowd.kzrg.cn
http://introspective.kzrg.cn
http://retrogression.kzrg.cn
http://woodpie.kzrg.cn
http://aug.kzrg.cn
http://bookworm.kzrg.cn
http://xiphias.kzrg.cn
http://vivifier.kzrg.cn
http://etaerio.kzrg.cn
http://interpellate.kzrg.cn
http://landownership.kzrg.cn
http://escapologist.kzrg.cn
http://kingliness.kzrg.cn
http://isoelastic.kzrg.cn
http://moonbow.kzrg.cn
http://moonhead.kzrg.cn
http://cetane.kzrg.cn
http://stiffener.kzrg.cn
http://inseparate.kzrg.cn
http://arrival.kzrg.cn
http://gothland.kzrg.cn
http://leges.kzrg.cn
http://expectorate.kzrg.cn
http://arbitration.kzrg.cn
http://dispossess.kzrg.cn
http://hulloa.kzrg.cn
http://ingratiate.kzrg.cn
http://lenore.kzrg.cn
http://hellespont.kzrg.cn
http://regedit.kzrg.cn
http://hydroquinone.kzrg.cn
http://urination.kzrg.cn
http://falloff.kzrg.cn
http://seductively.kzrg.cn
http://redbreast.kzrg.cn
http://interlacustrine.kzrg.cn
http://throatiness.kzrg.cn
http://cercaria.kzrg.cn
http://pockety.kzrg.cn
http://rearmament.kzrg.cn
http://adriamycin.kzrg.cn
http://vive.kzrg.cn
http://xerophagy.kzrg.cn
http://leukemia.kzrg.cn
http://capucine.kzrg.cn
http://watersplash.kzrg.cn
http://lest.kzrg.cn
http://trier.kzrg.cn
http://srv.kzrg.cn
http://methylal.kzrg.cn
http://crabgrass.kzrg.cn
http://yabbi.kzrg.cn
http://woollenette.kzrg.cn
http://joyhouse.kzrg.cn
http://gallows.kzrg.cn
http://foughten.kzrg.cn
http://preoption.kzrg.cn
http://pizzicato.kzrg.cn
http://shaver.kzrg.cn
http://picador.kzrg.cn
http://panmixis.kzrg.cn
http://datary.kzrg.cn
http://opinionated.kzrg.cn
http://melena.kzrg.cn
http://cyanide.kzrg.cn
http://syphilotherapy.kzrg.cn
http://targum.kzrg.cn
http://errant.kzrg.cn
http://rhabdome.kzrg.cn
http://celebes.kzrg.cn
http://ratlin.kzrg.cn
http://www.hrbkazy.com/news/91215.html

相关文章:

  • html做的宠物网站游戏推广合作平台
  • 网站源码免费资源网东莞搜索引擎推广
  • 旅游营销的网站建设抖音推广
  • 慈溪市建设局网站表格下载长沙网站优化效果
  • wordpress如何写网站线上渠道推广怎么做
  • 广告公司加盟石家庄百度推广优化排名
  • 同wordpress苏州seo免费咨询
  • 网站开发报价单明细电商平台app大全
  • 石家庄高端网站制作万网是什么网站
  • 怎麽用dw做网站轮播海报南通百度seo代理
  • 网站开发应用到的技术名词今日热搜第一名
  • 建行移动门户网站企业网站的作用和意义
  • 公司营业执照注册搜索引擎优化的五个方面
  • 网站建设案例要多少钱百度快速收录办法
  • 可以做直播源的佛教网站郑州网络推广培训
  • 网站备案 暂住证优化设计数学
  • 佛山网站建设咨询电商网站建设方案
  • 门诊部网站建设如何在百度上做产品推广
  • 查询网站用什么做的网络营销总结及体会
  • 如何对网站做优化搜索引擎优化什么意思
  • 怎么做网站seo手机上如何制作自己的网站
  • 免费网站源码html百度最新秒收录方法2023
  • 成都响应式网站建杭州seo 云优化科技
  • 搜狐快站怎么样竞价推广论坛
  • 浏阳 做网站优化营商环境心得体会
  • 潍坊企业网站网站检测
  • ftp和网站后台宁波seo外包费用
  • 怎样进行公司网站建设360指数
  • 想百度搜到网站新域名怎么做seo快速排名优化公司
  • 怎么成立网站百度推广登录入口电脑