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

温州做网站 掌熊号长沙电商网站制作

温州做网站 掌熊号,长沙电商网站制作,湖南长大建设集团股份有限公司网站,厦门网站建设解决方案线程和进程 以前我们要同时跑多个程序#xff0c;可以通过fork()多个子进程#xff0c;然后通过系统函数进行程序的替换#xff0c;但是创建进程代价大#xff0c;不仅要拷贝一份父进程的地址空间#xff0c;页表#xff0c;文件表述符表等。但是线程不需要因为是进程的… 线程和进程 以前我们要同时跑多个程序可以通过fork()多个子进程然后通过系统函数进行程序的替换但是创建进程代价大不仅要拷贝一份父进程的地址空间页表文件表述符表等。但是线程不需要因为是进程的执行流共享同个地址空间页表只需让不同线程执行不同的代码块函数就可以了。 一、线程函数接口 它们的返回值都比较统一成功就返回0失败就返回错误码 1线程创建 第一个参数类型是我们在定义的一个pthread_t类型的变量指针通过它我们可以拿到 用户识别的线程id。第二个参数设置为空。第三个参数是函数指针第四个是我们要传入线程执行函数的参数由于它的类型是void*,我们可以传入任意类型 2线程等待  线程和进程一样虽然是一个进程的地址空间的执行流但是也要进行等待回收不然会造成类似内存泄漏 问题。retval是输出型参数通过它可以拿到线程退出信息简单说就是线程执行函数的返回值。 3线程中止 进程有退出码线程没有只有我们自己写的返回值既用pthread_exit()返回或者直接return返回自定义的码由于返回值类型是void*,要强转不建议用exit因为会造成主线程退出主线程退出了进程资源就释放了所有线程就跟着退出了。通常这返回值信息会被线程等待函数pthread_join()拿到。 4线程分离  以前子进程退出如果父进程不进行等待我们可以自定义捕捉函数对子进程发出的退出信号进行忽略不会有僵尸进程。线程也可以通过分离让主线程不用主动对它进行等待,就算线程退出也不会有类型内存泄漏问题。注意的是线程分离只是一种工作状态它和没分离的线程几乎一样只是不用等待了。 二多线程的创建 pthread_create函数参数由于是void*我们就可以传任意类型的对象 makefile test:classpthreads.ccg -o $ $^ -stdc11 -lpthread .PHONY:clean clean:rm -f test classpthreads.cc #includeiostream using namespace std; #includepthread.h #includeunistd.h #includestring.h #include sys/types.h #includevectornamespace ljh{ class Task{ public: Task():datex(0),datey(0) {} void SetDate(int x,int y) {datexx;dateyy; } int Excute() {return datexdatey; } ~Task() {}private:int datex;int datey;}; class threaddate:public Task { public:threaddate(int x,int y,char* threadname ):_x(x),_y(y),_threadname(threadname){s.SetDate(_x,_y);}string getname(){return _threadname;}int run(){s.Excute();}private: string _threadname; int _x; int _y; Task s;}; class Result{ public: void SetResult(int result,string threadname) {_resultresult;_threadnamethreadname;} void Print() {coutresult:_resultthreadname_threadnameendl;} private:int _result;string _threadname; };}using namespace ljh; void* handlerTask(void*p) {threaddate* tdstatic_castthreaddate*(p); string nametd-getname(); Result* resultnew Result(); int rettd-run(); result-SetResult(ret,name); delete td; sleep(2); return result;}vectorResult* ret; vectorpthread_t pthreadname; int main() {for(int i0;i5;i)//创建5个线程{char* namenew char[64];pthread_t id;snprintf(name,sizeof(name),Thread_%d,i1);threaddate* pnew threaddate(2,6,name);pthread_create(id,nullptr,handlerTask,p);pthreadname.push_back(id);}for(auto e:pthreadname){ void* snullptr;//返回值void*pthread_join(e,s);//线程等待回收ret.push_back((Result*)s);}return 0; } 三.创建的线程和主线程之间关系 1.多线程只是主线程的执行流主线程main退出子进程也会退出所以我们必须让主线程最后退出 2.创建的新线程和主线程哪个先运行这个取决与调度器。 线程共享和私有 1共享代码和全局数据和进程文件描述符表 因为它们拥有同一块地址空间 2私有线程的硬件上下文数据cpu寄存器的值线程的独立栈结构。对于多进程来说线程的上下文数据比进程少所以也叫线程为轻量级进程。 我们可以用命令查看(ps -aL | grep  xxx).对于栈来说不同线程可以分为进程地址空间的栈空间还有线程独立的栈访问全局数据就时访问进程地址空间主栈在线程执行函数里面变量之类的就是线程独立的栈。 验证创建3个线程定义一个全局变量vale,还有线程执行函数的n,不同的线程打印全局vale地址是相同n的地址却是不同的。
http://www.w-s-a.com/news/619982/

相关文章:

  • 建个商城网站多少钱茂名专业网站建设
  • 开通公司网站免费的网站app下载
  • 跨境电商网站模板wordpress壁纸
  • 国内做网站网站代理电子商务网站建设与维护概述
  • 如何做地方网站推广沈阳网势科技有限公司
  • 哈尔滨网站优化技术涵江网站建设
  • 做网站搞笑口号wordpress全屏动画
  • 怎么可以建网站小程序代理项目
  • 怎样做软件网站哪个网站用帝国cms做的
  • 网站开发编程的工作方法wordpress dux-plus
  • 廊坊电子商务网站建设公司网站进不去qq空间
  • 南宁网站推广费用创意网页设计素材模板
  • 深圳技术支持 骏域网站建设wordpress 酒主题
  • 东莞网站建设+旅游网站改版数据来源表改怎么做
  • 手机端做的优秀的网站设计企业做网站大概多少钱
  • 优化网站使用体验手机网站解析域名
  • 网站制作 商务做网站的软件名字全拼
  • 阿里巴巴网官方网站温州网站建设设计
  • 传奇购买域名做网站国外网站设计 网址
  • 西安凤城二路网站建设seo网站是什么
  • 网站后台如何更换在线qq咨询代码在线种子资源网
  • 东莞网站优化制作免费中文wordpress主题下载
  • 东莞建筑设计院排名网络优化论文
  • 做牙工作网站郑州前端开发培训机构
  • 温州专业建站网站制作的管理
  • 公司网站开发策划书有没有专门做教程的网站
  • 江苏省工程建设信息网站一天赚1000块钱的游戏
  • 制作响应式网站报价品牌建设整体体系包括什么
  • 网站推广策划报告目前做win7系统最好的网站
  • 东莞网站建设咨询公江西网站建设平台