创建多个线程
创建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;
}
- 多个线程的执行结果是混乱的,这与操作系统的调度算法有关。
- 使用join()而不是用detach()更容易写出稳定易维护的多线程程序。
数据共享问题
只读数据
- 对于只读数据,多线程的访问时安全稳定的,一般不会有什么问题。
读写数据
对于可读可写的数据,如果不加限制,就会产生同时有线程去读和写;这就会带来混乱和错误,我们必须避免这种情况:
需要一些控制手段,来避免同时读写同一资源,最简单的方法就是互斥。