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

网页制作与网站建设试卷及答案杭州seo公司

网页制作与网站建设试卷及答案,杭州seo公司,wordpress忘记密码,开源网站 gutib前言 前面介绍了互斥锁,本篇博文介绍死锁及其他多线程遇到的情况。 什么情况会造成死锁 死锁指的是两个或两个以上的运算单元(进程、线程或协程),互相持有对方所需的资源,导致它们都无法向前推进,从而导…

前言

前面介绍了互斥锁,本篇博文介绍死锁及其他多线程遇到的情况。

什么情况会造成死锁

死锁指的是两个或两个以上的运算单元(进程、线程或协程),互相持有对方所需的资源,导致它们都无法向前推进,从而导致永久阻塞的问题就是死锁。

线程条件控制实现线程同步

初始化线程条件控制

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

也可以使用静态初始化:

pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

互斥锁也可以静态初始化


pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

 

阻塞条件线程

int pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex);
int pthread_cond_timedwait(pthread_cond_t* cond,pthread_mutex_t* mutex, const struct timespec* abstime); 

 备注:abstime 参数指的是绝对时间

pthread_cond_wait() 函数可以永久阻塞线程,直到条件变量成立的那一刻;pthread_cond_timedwait() 函数只能在 abstime 参数指定的时间内阻塞线程,超出时限后,该函数将重新对互斥锁执行“加锁”操作,并解除对线程的阻塞,函数的返回值为 ETIMEDOUT。

(参考文章)

解除条件线程阻塞

int pthread_cond_signal(pthread_cond_t* cond);
int pthread_cond_broadcast(pthread_cond_t* cond);

pthread_cond_signal() 函数至少解除一个线程的“被阻塞”状态,如果等待队列中包含多个线程,优先解除哪个线程将由操作系统的线程调度程序决定;

pthread_cond_broadcast() 函数可以解除等待队列中所有线程的“被阻塞”状态。

有可能解除阻塞后还是无法执行,可能存在的原因是互斥锁锁定了,等待互斥锁释放资源后即可继续执行。

销毁条件线程

int pthread_cond_destroy(pthread_cond_t *cond);

多线程编程

thread9.c(死锁 2个锁产生冲突)

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>pthread_mutex_t mutex;
pthread_mutex_t mutex2;
pthread_attr_t attr;
pthread_attr_t attr2;
int g_data = 0;
void *func1(void *arg){
pthread_mutex_lock(&mutex);
sleep(1);
pthread_mutex_lock(&mutex2);
while(1){
printf("t1:%d\n",g_data++);
sleep(1);
if (g_data == 4){
pthread_mutex_unlock(&mutex);
//printf("t1 Quit.=============================\n");
pthread_exit(NULL);
exit(0);
}
}}
void *func2(void *arg){printf("t2:%ld thread is created.\n",(unsigned long)pthread_self());
printf("t2:param is %d\n",*((int *)arg));
while(1){
pthread_mutex_lock(&mutex2);
sleep(1);
pthread_mutex_lock(&mutex);
printf("t2:%d\n",g_data);
g_data++;
pthread_mutex_unlock(&mutex);
sleep(1); 
}
}
int main(){
int ret;
int param =100;
pthread_t t1;
pthread_t t2;
pthread_mutex_init(&mutex,NULL);
pthread_mutex_init(&mutex2,NULL);
ret = pthread_create(&t1,NULL,func1,(void *)&param);
if(ret == 0){
printf("main:Create t1 sucess.\n");
}
ret = pthread_create(&t2,NULL,func2,(void *)&param);
if(ret == 0){
printf("main:Create t2 sucess.\n");
}
printf("mainID:%ld .\n",(unsigned long)pthread_self());
printf("main:g_data = %d.\n",g_data);
pthread_join(t1,NULL);//等待
pthread_join(t2,NULL);//等待
pthread_attr_destroy(&attr);
pthread_attr_destroy(&attr2);
return 0;
}

thread10.c(条件线程)

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>pthread_mutex_t mutex;
pthread_cond_t cond;
int g_data = 0;
void *func1(void *arg){
pthread_mutex_lock(&mutex);//保证t1优先
while(1){
pthread_cond_wait(&cond,&mutex);//等待
printf("t1:%d\n",g_data++);
printf("t1 Run.=============================\n");
sleep(1);
g_data = 0;
}
}void *func2(void *arg){printf("t2:%ld thread is created.\n",(unsigned long)pthread_self());
printf("t2:param is %d\n",*((int *)arg));
while(1){
pthread_mutex_lock(&mutex);
printf("t2:%d\n",g_data);
g_data++;
if(g_data == 3)
{
pthread_cond_signal(&cond);//触发
} 
pthread_mutex_unlock(&mutex);
sleep(1);
}
}
int main(){
int ret;
int param =100;
pthread_t t1;
pthread_t t2;
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(&cond,NULL);
ret = pthread_create(&t1,NULL,func1,(void *)&param);
if(ret == 0){
printf("main:Create t1 sucess.\n");
}
ret = pthread_create(&t2,NULL,func2,(void *)&param);
if(ret == 0){
printf("main:Create t2 sucess.\n");
}
printf("mainID:%ld .\n",(unsigned long)pthread_self());
printf("main:g_data = %d.\n",g_data);
pthread_join(t1,NULL);//等待
pthread_join(t2,NULL);//等待
pthread_attr_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}

 后记

发现学习尤其是编程类的课程一定要跟练+反复回听查漏补缺,不然如同过眼云烟转瞬即忘。

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

相关文章:

  • appcms程序怎么做网站深圳做网站的公司
  • 360下载志鸿优化网官网
  • 网站项目书范文企业网络营销目标
  • 手机网站建设地址网店推广运营策略
  • 私服网站如何做seo西安市网站
  • 百度显示网站正在建设中中国去中心化搜索引擎
  • 快递物流网站建设开发具备哪些功能百度股市行情上证指数
  • 河间申梦网站建设制作刷关键词要刷大词吗
  • 网站视频怎么做的好处百度关键词搜索推广
  • 百度网站排名全掉谷歌seo
  • 智慧团建注册登录入口官网手机版seo排名优化的网站
  • 学校网站建设方案策划书百度搜索引擎广告投放
  • 深圳和海枫建设集团有限公司网站做好网络推广
  • 高端企业网站建设注意问题优化百度涨
  • logo在线制作免费网站东莞网站seo优化托管
  • 怎么做外国网站卖东西四川seo快速排名
  • 网站开发公司北京网络推广外包费用
  • 新网站怎么做seo百度一下 你就知道首页
  • 做一家开发网站的公司简介企业邮箱注册
  • 网站建设及维护合同没有限制的国外搜索引擎
  • 关于做网站的策划书鸿星尔克网络营销
  • 广州正佳广场官网东莞优化怎么做seo
  • 零售网站有哪些平台如何写好一篇软文
  • 怎么做wp网站最近发生的重大新闻
  • 德阳网站建设公司哪家好营销型网站开发公司
  • 网站建设视频图片网站的推广平台有哪些
  • wordpress 侧边栏浮动枫树seo
  • 苏州做网站费用明细南宁网站推广公司
  • web网站开发学院百度关键词分析工具
  • 市住房城乡建设部网站seo体系百科