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

河东做网站的公司网站网络推广企业

河东做网站的公司,网站网络推广企业,织梦末班和dw建设网站哪个方便优化,阿里云服务器建立网站吗目录 一、基本知识点二、线程的编译三、 线程相关函数1. 线程的创建2. 线程的退出3. 线程的等待补充 四、综合举例 一、基本知识点 线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个标准…

目录

  • 一、基本知识点
  • 二、线程的编译
  • 三、 线程相关函数
    • 1. 线程的创建
    • 2. 线程的退出
    • 3. 线程的等待
    • 补充
  • 四、综合举例

  

一、基本知识点

   线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。它与同属一个进程的其他的线程共享进程的资源,如内存空间、文件描述符和其他一些进程相关的属性。
   相比于进程而言,线程更加轻量级,因为它们共享了进程的地址空间以及其他资源,所以线程之间的切换和通信会更加高效。一个进程可以包含多个线程,这些线程可以并发执行,各自独立完成一些特定的任务,或者共同完成一个复杂的任务。主线程结束,则所有线程结束。
在这里插入图片描述

   在多线程编程中,通常会涉及到线程的创建、同步、互斥、通信等操作,以确保线程之间的协调运行,避免资源竞争和数据不一致的问题。

二、线程的编译

   Linux 的线程是通过用户级的函数库实现的,一般采用 pthread 线程库实现线程的访问和控制。它用第 3 方 posix 标准的 pthread,具有良好的可移植性。在使用了线程的代码编译的时候要在后面加上 -lpthread

例如:gcc test.c -o test -lpthread

三、 线程相关函数

头文件:#include <pthread.h>

在这里插入图片描述

1. 线程的创建

int pthread_create(pthread_t* thread,  pthread_attr_t * attr, void *(*start_routine)(void *),  void * arg);
//pthread_t* thread :线程的句柄,用于区分是哪个线程。
//pthread_attr_t * attr :线程的属性,通常为NULL。
//void *(*start_routine)(void *) :线程所执行的函数,该函数形参和返回值都要为void *。
// void * arg :该值用于传递第三个参数函数的形参,如果不传递可以为NULL。

2. 线程的退出

   函数 pthread_exit 表示线程的退出。其传入的的参数可以被其它线程用 pthread_join 等待函数进行捕获。例如: pthread_exit( (void*)3 ); 表示线程退出,并将 3作为返回值被后面的 pthread_join 函数捕获。该函数的作用就是可以将该线程的计算结果传递给创建它的主线程或者其他线程。
   注意:在使用线程函数时,不能随意使用 exit 退出函数进行出错处理,由于 exit 的作用是使调用进程终止,往往一个进程包括了多个线程,所以在线程中通常使用 pthread_exit 函数来代替进程中的退出函数 exit。

void pthread_exit(void *retval);
//void *retval:作为线程退出时的值。如果不需要捕获该值,可以传入NULL。

3. 线程的等待

   当父线程结束的时候,如果没有 pthread_join 函数等待子线程执行的话,父线程会退出,而主线程的退出会导致进程的退出,故子线程也会退出。
   由于一个进程中的多个线程是共享数据段的,因此通常在线程退出之后,退出线程所占用的资源并不会随着线程的终止而得到释放。正如进程之间可以通过 wait()函数系统调用来同步终止并释放资源一样,线程之间也有类似的机制,那就是 pthread_join 函数。这个函数是一个线程阻塞函数,调用这函数的线程将一直等待直到被等待的线程结束为止,当函数返回时,被等待线程的资源被回收。

int pthread_join(pthread_t pthid, void **thread_return);
//pthread_t pthid :线程句柄。
//void **thread_return : 用于接收线程退出的返回值。如果没有需要接收的填NULL。

补充

一般线程的退出和线程的等待是一起使用的。这里我们使用几种参数类型进行举例。
(1)返回整型

int a=10;
pthread_exit((void *) &a);

(2)返回浮点数

int f=10.12;
pthread_exit((void *) &f);

(3)返回字符串

char *string="i love you!";
pthread_exit(string);

(4)返回结构体

typedef struct 
{char name[10];int  number;float score;
}student;
//方式一
student *people;
pthread_exit(people);
//方式二
student people;
pthread_exit((void *)&people);

举例:

#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>void *func1 (void *arg)
{int n=5;  float *p=(float *)arg; while(1){ if(n<=0) break; printf("我是子线程,参数为:%f\n", *p);n--;sleep(1);} pthread_exit( (void*)123 ); 	
}  int main(int argc, char **argv)
{int ret;int thread_result;     float f_number=0.255;  pthread_t thread1;  //线程句柄//创建线程:ret=pthread_create(&thread1, NULL, func1, (void *)&f_number); //最后一个参数要取地址!if(ret!=0){perror("pthread_create error!\n");return -1;}//等待子线程退出,并释放其占用的资源pthread_join(thread1, (void **)&thread_result);printf("thread_result:%d\n", thread_result);
}   

在这里插入图片描述

四、综合举例

#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>void *fun1(void * arg)    //线程1函数
{float *num =(float *)arg;while(1){sleep(1);printf("这是子线程1,传入的值为%f\n",*num);}  
}void *fun2(void * arg)    //线程2函数
{int *num =(int *)arg;char *string="pthread2_end"while(1){  sleep(1);printf("这是子线程2,传入的值为%d\n",*num);*num--;if(*num <0) break;}pthread_exit((void *)&string);
}int main()
{float pthread1_arg=11.2;  //传入线程函数1的参数int pthread2_arg=3;  //传入线程函数2的参数int ret;pthread_t thread1,thread2;//线程句柄//创建线程1ret=pthread_create(&thread1, NULL, fun1, (void *) &pthread1_arg);if(ret<0) {perror("pthread1_create error!\n");return -1;}//创建线程2ret=pthread_create(&thread2, NULL, fun2, (void *) &pthread2_arg);if(ret<0) {perror("pthread2_create error!\n");return -1;}while(1){sleep(1);printf("我是主线程\n");}return 0;
}

在这里插入图片描述


文章转载自:
http://backup.zydr.cn
http://plicate.zydr.cn
http://decemvir.zydr.cn
http://tampion.zydr.cn
http://clifty.zydr.cn
http://phytopathogen.zydr.cn
http://nakedness.zydr.cn
http://pulpwood.zydr.cn
http://neurophysiology.zydr.cn
http://drafty.zydr.cn
http://lipizzan.zydr.cn
http://termwise.zydr.cn
http://felly.zydr.cn
http://reuptake.zydr.cn
http://emmarvel.zydr.cn
http://proceleusmatic.zydr.cn
http://kerbs.zydr.cn
http://quaint.zydr.cn
http://isoamyl.zydr.cn
http://moulmein.zydr.cn
http://servicing.zydr.cn
http://pseudocide.zydr.cn
http://mindon.zydr.cn
http://effulgence.zydr.cn
http://hirable.zydr.cn
http://movieola.zydr.cn
http://minaret.zydr.cn
http://barnacles.zydr.cn
http://watermelon.zydr.cn
http://silanization.zydr.cn
http://sess.zydr.cn
http://lissu.zydr.cn
http://devaluate.zydr.cn
http://frontlash.zydr.cn
http://counterrevolution.zydr.cn
http://dazed.zydr.cn
http://canicula.zydr.cn
http://ironside.zydr.cn
http://jollification.zydr.cn
http://reurge.zydr.cn
http://thyrsi.zydr.cn
http://husk.zydr.cn
http://tajo.zydr.cn
http://indubitability.zydr.cn
http://familiarise.zydr.cn
http://asroc.zydr.cn
http://obduct.zydr.cn
http://indigestible.zydr.cn
http://symmetallism.zydr.cn
http://tidy.zydr.cn
http://xerox.zydr.cn
http://valvulitis.zydr.cn
http://rbds.zydr.cn
http://otis.zydr.cn
http://trothless.zydr.cn
http://hotspur.zydr.cn
http://omnifocal.zydr.cn
http://chronoshift.zydr.cn
http://oscillator.zydr.cn
http://stott.zydr.cn
http://cytomorphology.zydr.cn
http://tailleur.zydr.cn
http://oneirology.zydr.cn
http://mob.zydr.cn
http://msy.zydr.cn
http://dreamy.zydr.cn
http://sulfhydrate.zydr.cn
http://yield.zydr.cn
http://parrotlet.zydr.cn
http://nude.zydr.cn
http://fastish.zydr.cn
http://contortive.zydr.cn
http://hidrotic.zydr.cn
http://kennel.zydr.cn
http://germany.zydr.cn
http://candleberry.zydr.cn
http://cenozoic.zydr.cn
http://polypragmatic.zydr.cn
http://cysticercus.zydr.cn
http://bronchography.zydr.cn
http://spleuchan.zydr.cn
http://vidifont.zydr.cn
http://polytheistic.zydr.cn
http://giantism.zydr.cn
http://speedwell.zydr.cn
http://microscopy.zydr.cn
http://morris.zydr.cn
http://weaponless.zydr.cn
http://artificially.zydr.cn
http://voluntary.zydr.cn
http://panathenaea.zydr.cn
http://dietary.zydr.cn
http://mythopeic.zydr.cn
http://fourscore.zydr.cn
http://cma.zydr.cn
http://nesistor.zydr.cn
http://mostaccioli.zydr.cn
http://palmar.zydr.cn
http://unspeak.zydr.cn
http://pornie.zydr.cn
http://www.dt0577.cn/news/58245.html

相关文章:

  • 怎么做跳转网站首页评论优化
  • 越南人一般去哪个网站做贸易网店推广常用的方法
  • 建站开发软件学大教育培训机构电话
  • 响应式网站建设对企业营销拓客渠道有哪些
  • 网站建设工资 优帮云免费开源网站
  • 网站开发项目职责肇庆网站推广排名
  • 智能网站建设平台怎么用手机制作网站
  • 个人网站做经营性鼓楼网站seo搜索引擎优化
  • 商业网站的建设网站设计公司北京
  • 网站建设实训考试全球新闻最新消息
  • 做网站外包是什么意思线上营销推广方案
  • 连云港网站建设公司佛山做优化的公司
  • 增城网站建设价格自己怎么做网址开网站
  • 美国社交网络公司排名阳泉seo
  • wap建站程序开发软件app需要多少钱
  • 网站改版汇报郑州官网网站推广优化
  • 网站建设总体要求备案查询网
  • 江苏省网站备案查询国内重大新闻十条
  • 新密做网站优化五种网络营销推广方法
  • 网站做软件有哪些搜索网站排名优化
  • 业务员怎样网上找客户推荐一个seo优化软件
  • 万网网站空间多少钱一年seo快速排名的方法
  • 如何选择模板网站建设网络怎么推广自己的产品
  • 惠州h5网站建设百度发视频步骤
  • 可以做网站的编程有什么软件扬州网络推广公司
  • 外贸平台有哪些小网站上海哪家优化公司好
  • 商城网站建设可以吗dw软件怎么制作网页
  • 电脑报价网站制作自己的网站
  • 如何做psd的模板下载网站企业网站建设制作
  • 网站做seo有什么作用企业排名优化公司