您的位置:首页 > 娱乐 > 明星 > C++多线程同步

C++多线程同步

2024/12/23 3:39:58 来源:https://blog.csdn.net/Struggling_Jeff/article/details/139425507  浏览:    关键词:C++多线程同步

C++使用多线程必须包含头文件 #include <thread> 来实现
当多个线程同事访问一个对象的时候,会产生数据竞争现象。
这个时候,就可以加锁,同步资源,解决数据竞争。
最简单就是互斥锁mutex

上代码,计算一个数自增到1000:

#include <iostream>
#include <vector>
#include <thread>
#include <mutex>
using namespace std;std::mutex g_mutex;//线程函数
void Func(int& value, int idx)
{while (true){//加锁std::lock_guard<mutex> lock(g_mutex);//计算写数据value++;if (value > 1000){cout << "Thread No." << idx << "\t Thread id: " << std::this_thread::get_id() << "\t exit" << endl;break;}cout << "Thread No." << idx << "\t Thread id: " << std::this_thread::get_id() << ", value:  " << value << endl;//线程等待5msstd::this_thread::sleep_for(std::chrono::milliseconds(5));}
}int main()
{//核心数int nCount = thread::hardware_concurrency();auto t1 = std::chrono::steady_clock::now();int value = 1;vector<thread> arr;for (int i = 0; i < nCount; i++){arr.push_back(thread(Func, std::ref(value), i + 1));}//主线程等待子线程结束for (int i = 0; i < nCount; i++){arr[i].join();}auto t2 = std::chrono::steady_clock::now();int64_t ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count();std::cout << "time elapsed: " << ms << " ms" << std::endl;cin.get();return 0;
}

在这里插入图片描述
计算完毕,线程退出:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com