首页 > 代码库 > C++中多线程
C++中多线程
1.多线程
多线程案例:
#include<iostream>
#include<thread>
#include<string>
#include<windows.h>
usingnamespacestd;
voidrun(intnum)
{
Sleep(1000);
std::cout << "你好天朝" << num <<endl;
}
voidmain()
{
thread *p[10];
for (inti = 0;i < 10;i++)
{
p[i] = newthread(run,i);//循环创建线程
//p[i]->join();//等待,相当于堵塞的状态
p[i]->detach();//脱离当前主线程自由执行,乱序,也就是说每个线程的执行是随机的,是并发执行。
}
cin.get();
}
运行结果是:
2.线程案例2
#include<iostream>
#include<thread>
#include<string>
#include<windows.h>
usingnamespacestd;
voidhelloworld()
{
std::cout << "你好天朝" << endl;
}
voidhelloworldA()
{
std::cout << "你好天朝A" << endl;
}
voidhelloworldB()
{
std::cout << "你好天朝B" << endl;
}
//通过下面这种方式实现的线程永远是顺序的
voidmain()
{
std::threadt1(helloworld);//线程顺序执行
std::threadt2(helloworldA);
std::threadt3(helloworldB);
cin.get();
}
3.线程加锁和线程解锁
#include<iostream>
#include<thread>
#include<string>
#include<windows.h>
#include<mutex>
usingnamespacestd;
//两个线程并行访问一个变量
intg_num = 20;//找到或者找不到的标识
mutexg_mutex;
voidgoA(intnum)
{
//你访问的变量,在你访问期间,别人访问不了,
//这种情况明显可以看到自己被执行的次数多了
g_mutex.lock();
for (inti = 0;i < 15;i++)
{
Sleep(300);
g_num = 10;
std::cout << "线程" << num <<" " <<g_num <<endl;
}
g_mutex.unlock();
}
voidgoB(intnum)
{
for (inti = 0;i < 15;i++)
{
Sleep(500);
g_num = 11;
std::cout << "线程" << num <<" " <<g_num <<endl;
}
}
voidmain()
{
threadt1(goA,1);
threadt2(goB, 2);
t1.join();
t2.join();
std::cin.get();
}
运行结果:
4.线程之间通信以及锁定
案例:
#include<iostream>
#include<thread>
#include<string>
#include<windows.h>
usingnamespacestd;
//两个线程并行访问一个变量
//找到或者找不到的标识
intg_num = 20;
voidgoA(intnum)
{
for (inti = 0;i < 15;i++)
{
Sleep(1000);
if (i == 6)
{
g_num = 5;
}
if (g_num == 5)
{
std::cout << "线程" << num <<"结束\n";
return;
}
std::cout << "线程" << num <<" " <<g_num <<endl;
}
}
voidgoB(intnum)
{
for (inti = 0;i < 150;i++)
{
Sleep(1000);
if (g_num == 5)
{
std::cout << "线程" << num <<"结束 \n";
return;
}
std::cout << "线程" << num <<" " <<g_num <<endl;
}
}
voidmain()
{
threadt1(goA, 1);
threadt2(goB, 2);
t1.join();
t2.join();
std::cin.get();
}
C++中多线程