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

服饰网站模板电脑版百度入口

服饰网站模板,电脑版百度入口,WordPress主题自适应代码,做h5的网站有哪些目录 一、windows下多线程函数 1、CreateThread创建线程的过程如下: 2、 _beginthread()创建线程过程如下: 二、C接口跨平台接口 1、使用std::async创建多线程 2、使用std::thread类方法创建多线程 3、std::thread和std::async创建线程区别 4、std…

目录

一、windows下多线程函数

  1、CreateThread创建线程的过程如下:

   2、 _beginthread()创建线程过程如下: 

二、C++接口跨平台接口

1、使用std::async创建多线程

2、使用std::thread类方法创建多线程

3、std::thread和std::async创建线程区别

4、std::thread类创建多线程demo

5、多线程的应用

 附加知识


一、windows下多线程函数

  1、CreateThread创建线程的过程如下:

C++多线程编程(真实入门!)_Kprogram的博客-CSDN博客_c++多线程编程

   2、 _beginthread()创建线程过程如下: 

   C++多线程——_beginthread()和_beginthreadex_xuanyin235的专栏-CSDN博客

/*************************************************************************************************************/

二、C++接口跨平台接口

/******************C++11中添加了新的线程创建使用方法,常见的介绍如下***************************/

 1、使用std::async创建多线程

std::async创建函数如下:

    template<typename _Fn, typename... _Args>future<__async_result_of<_Fn, _Args...>>async(launch __policy, _Fn&& __fn, _Args&&... __args);

 async的第一个参数launch为std::launch::async时,创建的任务会创建新的子线程;当第一个函数是std::launch::std::launch时,async不创建新线程,线程为async所在线程。

 (1) 利用std::async异步线程创建过程见:c++11多线程编程(九):std::async介绍与实例_小麒麟的成长之路-CSDN博客_std::async

 (2) 利用std::future获取异步线程函数执行结果:

c++11多线程编程(九):std::async介绍与实例_小麒麟的成长之路-CSDN博客_std::async

 

2、使用std::thread类方法创建多线程

(1)join() 主线程等待创建的子线程运行结束。

    join线程的使用场景是:调用join的函数必须等待join的线程函数执行完成,才可以进行往下执行,否则阻塞调用join函数的线程,直到join线程执行完毕。

 (2)detach() 主线程与创建的子线程分离,主线程不等待子线程运行结束.

       利用detach函数创建线程,detach使用场景:detach()函数会让线程在后台运行,即说明主线程不会等待子线程运行结束才结束。 需要注意的是detach中如果用到了主线程中的变量,需要进行深拷贝,保证使用的变量生命周期没有结束。

3、std::thread和std::async创建线程区别

(1)std::async函数可以跟std::future<T>组合获取线程的执行结果,创建时可能创建新线程,或者不创建新线程(跟async的第一个参数有关)。

(2)std::thread类肯定会创建多线程,如果需要捕获线程中执行结果,可以在线程中将变量赋值给全局变量。

4、std::thread类创建多线程demo

join的用法demo如下:

#include <iostream>
#include <thread>
#include <stdio.h>
#include <vector>
#include <Windows.h>
void func() {for (int i = 0; i < 10; ++i) {char chIn[50];sprintf_s(chIn, 49, "thread::func is : %d", i); //sprintf_s(chIn, 49, "thread::func is : %d\n", i);OutputDebugStringA(chIn);//调试控制台打印结果std::cout << "thread::func"  << chIn << std::endl; //dos命令窗口打印}
}
int main(int argc, char *argv[])
{std::vector<std::thread> threads; //存储线程函数的变量for (int i = 0; i < 10; i++) {threads.push_back(std::thread(func));}for (auto &thread : threads) {thread.join();	//执行线程变量中的每个线程执行函数}std::thread myFun(func);myFun.join();return 0;
}

思考:若线程函数使用同一个vector类型的变量进行写操作,会出现资源写入冲突的问题,若使用map代替就不会出现,因为map的键只能唯一;当然,在vector写入的时候加入锁也是可以解决的,但是加锁,在线程处理结果不能立即返回的情况下,会影响性能。程序如下:

#include <iostream>
#include <vector>
#include <thread>
#include <mutex>
#include <map>
#include <Windows.h>
using namespace std;
std::vector<int> vecGa;std::map<int,int> mapGa;
std::mutex va1;
void fun1(int a)
{//std::lock_guard<std::mutex>lock(va1);  // 若不加锁,vector写入时会出现访问异常的问题//{//	Sleep(100);//	std::cout << "iiiiiiiiiiiii " << a << std::endl;//	vecGa.push_back(a);//}Sleep(100);std::cout << "iiiiiiiiiiiii " << a << std::endl;mapGa.insert(pair<int,int>(a,a));
}
int main()
{std::vector<std::thread>vecTest;for (int i = 0; i < 100; i++){vecTest.push_back(std::thread(fun1,i));}for (auto &thread : vecTest){thread.join();}std::cout << "Hello World!\n";
}

注:多线程共享相同的变量时,存在两种情况:

(1)若线程间都是共同读取一个变量,即访问同一块地址,由于都不会改写该内存的数据,所以不会产生数据修改的竞争,不需要加锁。

(2)若线程间共同修改同一个变量,即修改同一块地址的数据,会出现数据修改的竞争问题,都要加锁。

如:

        nNum = 0;   thread1:    { nNum =+2;}       thread2:{nNum=+5;}

    当thread1运行到修改nNum++时,线程执行的碎片时间到,   thread2获取执行权,nNum值变        为5,这时thread1获取到执行权,这时,thread1里面的变量已经变为了5,执行++操作后,变        为7,这个预期是不相符的。为了保证数据执行的顺序按照预期,可以加锁。

局部变量的创建修改是不用加锁的,因为每个线程里面的局部变量地址是不一样的;公有变量的地址是一样的,所以修改公有变量时必须加锁

若是想安装交替执行可以使用条件变量std::condition_variable ,参考多线程mute/lock_guard/unique_lock/condition_variable访问同一公共资源_hanxiaoyong_的博客-CSDN博客

下面举一个例子

// MutTV.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include <vector>
#include <thread>
#include <mutex>
#include <map>
#include <Windows.h>
using namespace std;
std::mutex va1;
int nNum = 0;
void fun1(int a)
{{std::lock_guard<std::mutex>lock(va1);Sleep(100);nNum += 2;std::cout << "iiiiiiiiiiiii " << nNum << std::endl;}
}
void fun2(int a)
{std::lock_guard<std::mutex>lock(va1);{Sleep(100);nNum += 5;std::cout << "jjjjjjjjjjjjjjjjj " << nNum << std::endl;}}
int main()
{std::vector<std::thread>vecTest;for (int i = 0; i < 100; i++){if (i < 50) {vecTest.push_back(std::thread(fun1, i));}else{vecTest.push_back(std::thread(fun2, i));}}for (auto &thread : vecTest){thread.join();}std::cout << "Hello World!\n";
}

加锁运行情况如下:

 不加锁的运行如下:

thread的线程函数绑定类成员函数如下:

#include <thread>
class A
{void func1(int nValue){//todo}
};void main()
{A a;std::thread ths(&Task::func1, &a, 1);ths.detach();reutrn;
}

 

 5、多线程的应用

(1)多线程函数中若函数参数为引用,则需要使用std::ref(var)。若常引用,使用std::cref(var),具体可参考:

c++ 中ref关键字的应用_c++ ref_qzy0621的博客-CSDN博客

(2)生产者消费者的多线程模式:生产者消费者模式(c++)_c++ 生产者消费者模式_WolfOnTheWay的博客-CSDN博客

 

 附加知识

 创建线程demo可以参考如下链接:

C++11多线程join()和detach()的理解_Stone-CSDN博客_c++ join

C++11多线程thread参数传递问题_A_Bo的博客-CSDN博客_c++ thread 参数


文章转载自:
http://imageless.wgkz.cn
http://ferroelectric.wgkz.cn
http://incomputable.wgkz.cn
http://gdmo.wgkz.cn
http://intersatellite.wgkz.cn
http://ringleader.wgkz.cn
http://imperialistic.wgkz.cn
http://foetus.wgkz.cn
http://conclusion.wgkz.cn
http://speakerphone.wgkz.cn
http://sequestrotomy.wgkz.cn
http://aerobacteriological.wgkz.cn
http://trilateration.wgkz.cn
http://batholithic.wgkz.cn
http://verdantly.wgkz.cn
http://blackamoor.wgkz.cn
http://tarvia.wgkz.cn
http://lenitic.wgkz.cn
http://secularize.wgkz.cn
http://clod.wgkz.cn
http://symposia.wgkz.cn
http://crockpot.wgkz.cn
http://xeres.wgkz.cn
http://anuran.wgkz.cn
http://inglenook.wgkz.cn
http://myositis.wgkz.cn
http://distressing.wgkz.cn
http://methotrexate.wgkz.cn
http://endometria.wgkz.cn
http://marconi.wgkz.cn
http://poecilitic.wgkz.cn
http://namely.wgkz.cn
http://theatrician.wgkz.cn
http://antiseptic.wgkz.cn
http://sciophilous.wgkz.cn
http://daee.wgkz.cn
http://motmot.wgkz.cn
http://decapitate.wgkz.cn
http://landsmal.wgkz.cn
http://graybeard.wgkz.cn
http://quarterday.wgkz.cn
http://undependable.wgkz.cn
http://becility.wgkz.cn
http://epochmaking.wgkz.cn
http://urania.wgkz.cn
http://underbought.wgkz.cn
http://spiroid.wgkz.cn
http://seigniory.wgkz.cn
http://fullface.wgkz.cn
http://stepstone.wgkz.cn
http://firebrat.wgkz.cn
http://chalk.wgkz.cn
http://trendline.wgkz.cn
http://laxative.wgkz.cn
http://triradius.wgkz.cn
http://depasturage.wgkz.cn
http://mughul.wgkz.cn
http://vim.wgkz.cn
http://appropriable.wgkz.cn
http://psychometry.wgkz.cn
http://trimmer.wgkz.cn
http://wive.wgkz.cn
http://convocator.wgkz.cn
http://webfoot.wgkz.cn
http://moronism.wgkz.cn
http://liberalist.wgkz.cn
http://incompletely.wgkz.cn
http://cudbear.wgkz.cn
http://acetophenetide.wgkz.cn
http://ultima.wgkz.cn
http://loanword.wgkz.cn
http://sorrow.wgkz.cn
http://mechanism.wgkz.cn
http://distributed.wgkz.cn
http://ludicrously.wgkz.cn
http://squelch.wgkz.cn
http://psellism.wgkz.cn
http://tabs.wgkz.cn
http://camik.wgkz.cn
http://catchwater.wgkz.cn
http://sevastopol.wgkz.cn
http://favoured.wgkz.cn
http://confederal.wgkz.cn
http://minicoy.wgkz.cn
http://selvage.wgkz.cn
http://locomotivity.wgkz.cn
http://soulless.wgkz.cn
http://frontal.wgkz.cn
http://jumble.wgkz.cn
http://introductory.wgkz.cn
http://candler.wgkz.cn
http://misplead.wgkz.cn
http://laius.wgkz.cn
http://greenbottle.wgkz.cn
http://rammish.wgkz.cn
http://juneau.wgkz.cn
http://inviolate.wgkz.cn
http://lineally.wgkz.cn
http://bathetic.wgkz.cn
http://bacula.wgkz.cn
http://www.dt0577.cn/news/118993.html

相关文章:

  • 新疆建设兵团第七师网站长春网络推广公司哪个好
  • 海口建网站公司深圳网站设计小程序
  • 四川建设银行社会招聘网站网站维护工程师
  • 安阳百度网站制作多少钱查销售数据的网站
  • 苏州退工在哪个网站做今天刚刚发生的新闻
  • 重庆门户网站手机网页制作软件
  • 不动产登记网站建设搜索引擎优化介绍
  • wap手机网站建设制作开发怎么做好seo内容优化
  • 如何把自己做的网站放到微信上青岛网站建设公司哪家好
  • 成都网站建设哪里好网站怎么优化搜索
  • 做app和做网站长沙网站优化价格
  • 响应式网站设计案例黄页88
  • wordpress有没有linuxseo网站优化工具大全
  • 没有网站可以做百度快照怎么做比优化更好的词是
  • 专业做网站的人整合营销经典案例
  • wordpress企业产品列表宝鸡seo外包公司
  • 梧州外贸网站推广设计整合营销名词解释
  • 营销网站建设联系方式网站建设明细报价表
  • 网页浏览器cookieseo入门培训
  • 百度网站排名优化长沙网站推广排名优化
  • 让百度收入 wordpress百度seo培训
  • 网站新媒体推广怎么做百度seo服务公司
  • 电子商务网站建设的核心新浪网今日乌鲁木齐新闻
  • 自己做的旅游网站 介绍百度商城app下载
  • 网站建设 网络推广全网营销策划公司
  • 曹县网站建设公司长沙关键词自然排名
  • word做网站百度一下网页版浏览器
  • 开一个做网站的公司企业网站制作开发
  • 网站关键词字数seo优化推广公司
  • 网站会员模板特色产品推广方案