设为首页 加入收藏

TOP

C++中多线程
2015-07-20 17:47:27 来源: 作者: 【 】 浏览:11
Tags:线程
??

1.多线程

多线程案例:

#include

#include

#include

#include

using namespace std;

void run(int num)

{

Sleep(1000);

std::cout << "你好天朝" << num << endl;

}

void main()

{

thread *p[10];

for (int i = 0; i < 10;i++)

{

p[i] = new thread(run,i);//循环创建线程

//p[i]->join();//等待,相当于堵塞的状态

p[i]->detach();//脱离当前主线程自由执行,乱序,也就是说每个线程的执行是随机的,是并发执行。

}

cin.get();

}

运行结果是:

\

2.线程案例2

#include

#include

#include

#include

using namespace std;

void helloworld()

{

std::cout << "你好天朝" << endl;

}

void helloworldA()

{

std::cout << "你好天朝A" << endl;

}

void helloworldB()

{

std::cout << "你好天朝B" << endl;

}

//通过下面这种方式实现的线程永远是顺序的

void main()

{

std::thread t1(helloworld);//线程顺序执行

std::thread t2(helloworldA);

std::thread t3(helloworldB);

cin.get();

}

\

3.线程加锁和线程解锁

#include

#include

#include

#include

#include

using namespace std;

//两个线程并行访问一个变量

int g_num = 20;//找到或者找不到的标识

mutex g_mutex;

void goA(int num)

{

//你访问的变量,在你访问期间,别人访问不了,

//这种情况明显可以看到自己被执行的次数多了

g_mutex.lock();

for (int i = 0; i < 15; i++)

{

Sleep(300);

g_num = 10;

std::cout << "线程" << num << " " << g_num << endl;

}

g_mutex.unlock();

}

void goB(int num)

{

for (int i = 0; i < 15; i++)

{

Sleep(500);

g_num = 11;

std::cout << "线程" << num << " " << g_num << endl;

}

}

void main()

{

thread t1(goA,1);

thread t2(goB, 2);

t1.join();

t2.join();

std::cin.get();

}

运行结果:

\

4.线程之间通信以及锁定<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KCjxwPrC4wP2jujwvcD4KCjxwIGFsaWduPQ=="left">#include

#include

#include

#include<windows.h>

using namespace std;

//两个线程并行访问一个变量

//找到或者找不到的标识

int g_num = 20;

void goA(int num)

{

for (int i = 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;

}

}

void goB(int num)

{

for (int i = 0; i < 150; i++)

{

Sleep(1000);

if (g_num == 5)

{

std::cout << "线程" << num << "结束 \n";

return;

}

std::cout << "线程" << num << " " << g_num << endl;

}

}

void main()

{

thread t1(goA, 1);

thread t2(goB, 2);

t1.join();

t2.join();

std::cin.get();

}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVa 1584 Circular Sequence(环形.. 下一篇Codeforces Round #257 (Div. 2)E..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)