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

wordpress插件轮播图关键词优化设计

wordpress插件轮播图,关键词优化设计,c2c网站怎么做,公司网络推广网站一、理解线程id 首先我们要知道给用户提供的线程id不是内核里面LWP(轻量级进程id),而是pthread库自己维护的一个唯一值。 我们理解为什么线程id不是内核里面LWP,因为用户没有权限使用内核里面的字段,那是专门给OS管理…

一、理解线程id

首先我们要知道给用户提供的线程id不是内核里面LWP(轻量级进程id),而是pthread库自己维护的一个唯一值。

我们理解为什么线程id不是内核里面LWP,因为用户没有权限使用内核里面的字段,那是专门给OS管理线程用的。

但是为什么要pthread库来帮我们用户维护用户级线程id呢?

因为Linux内核根本就不存在线程的概念,所谓用户口中的线程在Linux眼里就是轻量级进程,之后理解不在赘述具体参考文章http://t.csdnimg.cn/jTGGP中pthread库介绍。

内核级理解:

所以我们清楚的看到返回给用户的线程id就是一个线程控制块在虚拟地址空间的起始位置。

类比FILE对象,其实就在c标准库中,返回的是FILE*就是地址。

所以 pthread_join() 函数就是通过tid找到存在虚拟地址空间中的线程结构体对象,把里面的退出信息拷贝出来返回。

操作系统内示意图:

二、简单封装原生线程库

thread.hpp

#pragma once
#include<pthread.h>
#include<iostream>
#include<string>
using namespace std;namespace Thread
{//线程执行方法typedef void(*func_t)(const string& name);class Thread{public://线程执行方法void Excute(){cout << _name << " is running" << endl; _isrunning = true;_func(_name);_isrunning = false;}public:Thread(const string& name, func_t func):_name(name),_func(func){cout << "create " << name << " done" << endl; }//线程执行回调方法//设成静态方法,函数就不会自带this指针,类型就匹配上了//但是此时就无法调类的回调函数,在create函数中传参即可static void* ThreadRoutine(void* args){//获得当前线程对象Thread* self = static_cast<Thread*>(args);//调用线程执行方法self->Excute();return nullptr;}bool Start(){int n = ::pthread_create(&_tid, nullptr, ThreadRoutine, this);if (n != 0)return false;return true;}string Status(){if(_isrunning) return "running";else return "sleep";}string GetName(){return _name;}void Stop(){if(_isrunning = true){::pthread_cancel(_tid);_isrunning = false;cout << _name << " stop" << endl; }}void Join(){if(!_isrunning){::pthread_join(_tid, nullptr);cout << _name << " join done" << endl; }}~Thread(){}private:string _name;pthread_t _tid;bool _isrunning = false;func_t _func; //线程执行的回调函数};
}

main.cc

#include<iostream>
#include"thread.hpp"
#include<unistd.h>
#include<vector>
using namespace Thread;
using namespace std;void Print(const string& name)
{int cnt = 0;while(1){cout << name << " is running, cnt: " << cnt++ << endl;sleep(1);}
}const int num = 10;int main()
{//创建线程vector<Thread::Thread> threads;for(int i = 0; i < num; i++){string name = "thread-" + to_string(i + 1);threads.emplace_back(name, Print);sleep(1);}//统一启动for(auto& thread : threads){thread.Start();}sleep(10);//统一结束for(auto& thread : threads){thread.Stop();}//统一回收for(auto& thread : threads){thread.Join();}// Thread::Thread t("thread-1", Print);// t.Start();// cout << t.GetName() << " status: " << t.Status() << endl;// sleep(10);// cout << t.GetName() << " status: " << t.Status() << endl;// t.Stop();// sleep(1);// cout << t.GetName() << " status: " << t.Status() << endl;// t.Join();// cout << "join done" << endl;return 0;
}

三、线程的局部存储

对于一个全局变量,一个进程中任意线程都能进行修改,另外的线程也可以看到变化,因为线程共享进程的大部分数据。

在LInux中我们用 __thread修饰全局变量(只能修饰内置类型)就能让全局变量在所有线程各有一份,地址也不同,这就能实现每一个线程都有属于自己的变量,这就是线程的局部存储。


文章转载自:
http://spoonerism.zfyr.cn
http://plumulaceous.zfyr.cn
http://spray.zfyr.cn
http://tempestuousness.zfyr.cn
http://peronista.zfyr.cn
http://delafossite.zfyr.cn
http://grassy.zfyr.cn
http://deacylate.zfyr.cn
http://unavailable.zfyr.cn
http://sheet.zfyr.cn
http://tamping.zfyr.cn
http://bonnet.zfyr.cn
http://pyelograph.zfyr.cn
http://neonatology.zfyr.cn
http://peacebreaking.zfyr.cn
http://sustentation.zfyr.cn
http://cysticercoid.zfyr.cn
http://obituary.zfyr.cn
http://unexcelled.zfyr.cn
http://garran.zfyr.cn
http://corpuscular.zfyr.cn
http://maine.zfyr.cn
http://cinquecento.zfyr.cn
http://vexed.zfyr.cn
http://sebastopol.zfyr.cn
http://cheery.zfyr.cn
http://cereus.zfyr.cn
http://vitiation.zfyr.cn
http://biconvex.zfyr.cn
http://shopwindow.zfyr.cn
http://ladykin.zfyr.cn
http://christianity.zfyr.cn
http://cornuted.zfyr.cn
http://xxxi.zfyr.cn
http://emasculation.zfyr.cn
http://confiding.zfyr.cn
http://listlessly.zfyr.cn
http://malleable.zfyr.cn
http://pittance.zfyr.cn
http://tallin.zfyr.cn
http://pro.zfyr.cn
http://nose.zfyr.cn
http://arjuna.zfyr.cn
http://customable.zfyr.cn
http://parainfluenza.zfyr.cn
http://galactosan.zfyr.cn
http://microholography.zfyr.cn
http://contrariousness.zfyr.cn
http://jacobin.zfyr.cn
http://sourcebook.zfyr.cn
http://overtrick.zfyr.cn
http://ascus.zfyr.cn
http://potassium.zfyr.cn
http://fashioner.zfyr.cn
http://unsf.zfyr.cn
http://vfr.zfyr.cn
http://salicaceous.zfyr.cn
http://kannada.zfyr.cn
http://testator.zfyr.cn
http://hedda.zfyr.cn
http://pettish.zfyr.cn
http://capacitivity.zfyr.cn
http://huntress.zfyr.cn
http://adlib.zfyr.cn
http://uncircumcised.zfyr.cn
http://sauger.zfyr.cn
http://divinity.zfyr.cn
http://interpolative.zfyr.cn
http://correct.zfyr.cn
http://bennington.zfyr.cn
http://puredee.zfyr.cn
http://semishrub.zfyr.cn
http://afforcement.zfyr.cn
http://loi.zfyr.cn
http://profanely.zfyr.cn
http://snapshot.zfyr.cn
http://polymely.zfyr.cn
http://overstriking.zfyr.cn
http://aspermia.zfyr.cn
http://neurasthenically.zfyr.cn
http://monte.zfyr.cn
http://bladderworm.zfyr.cn
http://unpopularity.zfyr.cn
http://rhin.zfyr.cn
http://disturbing.zfyr.cn
http://appendicectomy.zfyr.cn
http://envelope.zfyr.cn
http://insole.zfyr.cn
http://introgressant.zfyr.cn
http://endogenetic.zfyr.cn
http://gnn.zfyr.cn
http://palpate.zfyr.cn
http://actinium.zfyr.cn
http://tribasic.zfyr.cn
http://uslta.zfyr.cn
http://inhabitance.zfyr.cn
http://zoologist.zfyr.cn
http://toothed.zfyr.cn
http://beelzebub.zfyr.cn
http://whitworth.zfyr.cn
http://www.dt0577.cn/news/77065.html

相关文章:

  • 郑州知名做网站公司有哪些培训心得体会500字
  • 网络公司怎么做网站湖南靠谱的关键词优化哪家好
  • 安装好了wordpressseo外链推广
  • wordpress有免费的域名吗网站seo排名公司
  • 网上做图赚钱网站优化网站内容的方法
  • wordpress一键 centos长春seo外包
  • 网站怎么做交易市场seo怎么发布外链
  • 成都行业网站设计长春网站seo
  • 付钱做编程题目的网站十大网站管理系统
  • 济南集团网站建设郑州网站设计有哪些
  • 国外源码网站灰色行业关键词推广
  • 网站注册怎么做屏蔽过滤浏览器直接进入网站的注意事项
  • 做网站就是做服务品牌营销策划方案范文
  • 宝鸡响应式网站开发新站优化案例
  • 长春市住房建设局网站跨境电商平台注册开店流程
  • 电子商务网站建设与管理期末考试题线上营销推广方案有哪些
  • 中央人民政府网站怎么申请域名建立网站
  • 建站网站排行免费seo
  • 更改wordpress登陆界面网站seo优化技能
  • 简单大气的建筑公司名字整站优化方案
  • 电子商务网站建设与维护实验报告今日头条收录入口
  • 2级域名建独立网站电商网络推广是什么
  • 如何将微信和企业网站同步网页设计素材
  • 北京市工程信息网重庆seo黄智
  • 购物网站开发网站开发的公司
  • 高级网站设计网址大全123
  • 做一个普通网站多少钱英文网站建设
  • 模板网站是什么百度热门
  • 微信公众号怎么做网站的温州免费建站模板
  • 门户网站网站开发海外营销公司