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

网站建设最简单的教程视频app手机网站制作

网站建设最简单的教程视频,app手机网站制作,上海网站营销公司,广州专业的做网站公司作业1&#xff1a; 多线程实现文件拷贝&#xff0c;线程1拷贝一半&#xff0c;线程2拷贝另一半&#xff0c;主线程回收子线程资源。 代码&#xff1a; #include <myhead.h> sem_t sem1; void *copy1()//子线程1函数 拷贝前一半内容 {int fd1open("./1.txt",O…

作业1:

        多线程实现文件拷贝,线程1拷贝一半,线程2拷贝另一半,主线程回收子线程资源。

代码:

#include <myhead.h>
sem_t sem1;
void *copy1()//子线程1函数 拷贝前一半内容
{int fd1=open("./1.txt",O_RDONLY);int fd2=open("./2.txt",O_CREAT|O_RDWR|O_APPEND,0664);if(fd1==-1){perror("open");}if(fd2==-1){perror("open");}char s[100];int sum1=0,res1=0;int len=lseek(fd1,0,SEEK_END);//统计文件字节数lseek(fd1,0,SEEK_SET);//统计完光标要返回while(1){res1=read(fd1,s,sizeof(s));sum1+=res1;//每读一次,把读取长度加起来if(res1==0||sum1>len/2){int k=res1-(sum1-len/2);//该次读取字节数-超过len/2的字节数write(fd2,s,k);break;}write(fd2,s,sizeof(s));//把读取到的字节写入2.txt}printf("线程1拷贝完成\n");close(fd1);close(fd2);sem_post(&sem1);pthread_exit(NULL);
}
void *copy2()//子线程2函数  拷贝后一半内容
{sem_wait(&sem1);int fd1=open("./1.txt",O_RDONLY);int fd2=open("./2.txt",O_CREAT|O_RDWR|O_APPEND,0664);if(fd1==-1){perror("open");}if(fd2==-1){perror("open");}int fd3;int res2=0;int len=lseek(fd1,0,SEEK_END);//统计文件字节数lseek(fd1,0,SEEK_SET);//统计完光标要返回dup2(fd1,fd3);//fd3重定向fd1lseek(fd3,len/2,SEEK_SET);//fd3光标移动中间char s[100];while(1){res2=read(fd3,s,sizeof(s));if(res2==0){break;}write(fd2,s,res2);}printf("线程2拷贝完成\n");close(fd1);close(fd2);close(fd3);pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{pthread_t tid1,tid2;sem_init(&sem1,0,0);if(pthread_create(&tid1,NULL,copy1,NULL)){perror("pthread_create");return -1;}if(pthread_create(&tid2,NULL,copy2,NULL)){perror("pthread_create");return -1;}pthread_join(tid1,NULL);pthread_join(tid2,NULL);printf("回收完成\n");sem_destroy(&sem1);return 0;
}

运行测试结果:

作业2:线程同步之条件变量

        生产者先让消费者组成一个队列,生产者生产了一台劳斯莱斯,唤醒第一个消费者来消费,然后再生产第二台劳斯莱斯,唤醒第二个消费者来消费,这样可以精确化的控制生产者线程和消费者线程的协同

代码:

#include <myhead.h>
#define MAX 10
pthread_cond_t cond;
pthread_mutex_t mtx;
sem_t sem;
int n=0,count=0;
void *producer()
{for(int i=0;i<MAX;i++){sem_wait(&sem);//用条件变量卡一下n++;printf("生产了一台特斯拉%d\n",n);pthread_cond_signal(&cond);//唤醒一个等待线程}pthread_exit(NULL);
}
void *consumer()
{pthread_mutex_lock(&mtx);//进入后锁住pthread_cond_wait(&cond,&mtx);//条件变量每接受一次进入后重新上锁count++;printf("消费了一台特斯拉%d\n",count);usleep(200000);pthread_mutex_unlock(&mtx);sem_post(&sem);//条件变量放行pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{pthread_t tid1,tid2[MAX];pthread_cond_init(&cond,NULL);//条件变量pthread_mutex_init(&mtx,NULL);//互斥锁sem_init(&sem,0,1);//条件变量if(pthread_create(&tid1,NULL,producer,NULL)!=0){perror("pthread_create");return -1;}for(int i=0;i<MAX;i++){if(pthread_create(&tid2[i],NULL,consumer,NULL)!=0){perror("pthread_create");return -1; }}pthread_join(tid1,NULL);for(int i=0;i<MAX;i++){pthread_join(tid2[i],NULL);}pthread_mutex_destroy(&mtx);pthread_cond_destroy(&cond);return 0;
}

运行测试结果:

作业3:

互斥锁,无名信号量,条件变量再练习一遍

1.互斥锁代码如何实现

代码:

#include <myhead.h>
pthread_mutex_t mtx;//定义互斥锁
void *fun(void *n)
{pthread_mutex_lock(&mtx);//上锁printf("%d\n",*(int *)n);pthread_mutex_unlock(&mtx);//解锁pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{pthread_t tid1,tid2;int num1=1,num2=2;pthread_mutex_init(&mtx,NULL);//初始化互斥锁if(pthread_create(&tid1,NULL,fun,&num1))//子线程1{perror("pthread_create");return -1;}if(pthread_create(&tid2,NULL,fun,&num2))//子线程2{perror("pthread_create");return -1;}pthread_join(tid1,NULL);//阻塞回收线程pthread_join(tid2,NULL);pthread_mutex_destroy(&mtx);//毁锁return 0;
}

运行测试结果:

2.无名信号量

代码:

#include <myhead.h>
#define MAX 5
sem_t sem;//定义无名信号量
int n=0;
void *producer()
{for(int i=0;i<MAX;i++){n++;printf("生产了特斯拉%d\n",n);}sem_post(&sem);//释放无名变量pthread_exit(NULL);
}
void *consumer()
{sem_wait(&sem);//申请无名变量printf("消费了一台特斯拉%d\n",n);n--;sem_post(&sem);pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{pthread_t tid1,tid[MAX];sem_init(&sem,0,0);//初始化无名信号量if(pthread_create(&tid1,NULL,producer,&n)!=0){perror("pthread_create");return -1;}for(int i=0;i<MAX;i++){if(pthread_create(&tid[i],NULL,consumer,&n)!=0){perror("pthread_create");return -1;}}pthread_join(tid1,NULL);for(int i=0;i<MAX;i++){pthread_join(tid[i],NULL);}sem_destroy(&sem);//销毁无名变量return 0;
}

运行测试结果:

3.条件变量

见作业2

Xmind知识点:

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

相关文章:

  • 成都 网站 建设网站分享平台
  • 网站自适应 如何做湖北网络推广有限公司
  • 哪些网上可以赚钱的网站长春市做网站哪家好
  • 网站已收录的404页面的查询我做的网站不能往下拉
  • python代码网站网站建设公司的出路
  • 动漫网站html策划推广是做什么的
  • 做网站必须在工信部备案吗成都英文网站建设
  • 专业广州网站设计北海做网站的公司
  • 图书网站建设策划书怀化市优化办电话
  • 网站放自己服务器备案关键词优化seo优化
  • 亚马逊官方网站的建设莆系医疗网站建设
  • 做网站推广需要做什么自己开发一个app软件
  • 网站建设行业广告语百度seo提交
  • 网站建设免费视频教学南沙网站建设公司哪家好
  • 装饰公司做网站怎么收费咸阳网络推广
  • 如何给网站流量来源做标记通过在网址后边加问号?网站建设合同副本
  • 网站建设与维护的认识app界面设计流程图
  • 自建网站定位百度网站查反链
  • 有什么自学网站建设的网站上海做公司网站多少钱
  • 甘肃省建设工程168网站刷赞网站推广免费链接
  • 京东物流网站建设策划书外国的html 素材网站
  • 网站备案地区国际域名查询网站
  • 做一个交易网站要花多少钱给我一个网站图片
  • 网站建设常用英语seo优化实训报告
  • 2018建设网站中国污水处理工程网
  • 买了万网的域名跟定制网站还要买空间吗图书电子商务网站建设
  • 云相册网站怎么做的优秀广告案例分析
  • 进一步加强网站建设平面设计专业哪个学校最好
  • 小网站推广app下载软件电脑版官网
  • 上海新闻头条宁波正规seo推广公司