创建多个线程、数据共享问题分析、案例代码

第四节 创建多个线程、数据共享问题分析、案例代码

在这里插入图片描述

一、创建和等待多个线程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void TextThread()
{
cout << "我是线程" << this_thread::get_id() << endl;
/* … */
cout << "线程" << this_thread::get_id() << "执行结束" << endl;
}
//main函数里 vector threadagg;
for (int i = 0; i < 10; ++i)
{
threadagg.push_back(thread(TextThread));
}
for (int i = 0; i < 10; ++i)
{
threadagg[i].join();
}
  • 把thread对象放入到容器中管理,看起来像个thread对象数组,对一次创建大量的线程并对大量线程进行管理有好处
  • 多个线程执行顺序是乱的,跟操作系统内部对线程的运行调度机制有关

二:数据共享问题分析
2.1 只读的数据

  • 是安全稳定的

2.2 有读有写

  • 若不加处理,就会出错
  • 最简单的防止崩溃方法:读的时候不能写,写的时候不能读。
  • 写的动作分10小步,由于任务切换,导致各种诡异的事情发生(最可能的还是崩溃)