C++并发与多线程(三) 创建多个线程

文章目录

    • 创建多个线程
    • 数据共享问题
      • 只读数据
      • 读写数据

创建多个线程

创建10个线程、线程入口函数统一使用myPrint;

将thread对象放到vector容器中进行管理;

void myPrint(int id) {
	cout << "我的线程开始执行! id = " << id << endl;
	//......
	cout << "我的线程执行完毕! id = " << id << endl;
}

int main() {
	//创建多个线程
	vector<thread> mythreads;
	//创建10个线程,入口函数都是myPrint,id = i
	for (int i = 0; i < 10; i++) {
		mythreads.push_back(thread(myPrint, i));  //创建线程并开始执行
	}
	for (vector<thread>::iterator it = mythreads.begin(); it != mythreads.end(); it++) {
		it->join();  //主线程等待子线程
	}

	cout << "主线程执行完毕!" << endl;
}
  1. 多个线程的执行结果是混乱的,这与操作系统的调度算法有关。
  2. 使用join()而不是用detach()更容易写出稳定易维护的多线程程序。

数据共享问题

只读数据

  • 对于只读数据,多线程的访问时安全稳定的,一般不会有什么问题。

读写数据

对于可读可写的数据,如果不加限制,就会产生同时有线程去读和写;这就会带来混乱和错误,我们必须避免这种情况:

需要一些控制手段,来避免同时读写同一资源,最简单的方法就是互斥

你可能感兴趣的:(C++,c++,多线程,并发编程)