首页 > 代码库 > 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++中多线程