printf的线程安全性以及cout的线程不安全性验证,以及意外收获
【摘要】 码给你,自测。#include <iostream>#include <thread>#include <atomic>#include <ctime>#include <mutex>using namespace std;std::atomic_int a;//int a;std::mutex _mutex;void add_() { for (int i = 0; i < 10000; ...
码给你,自测。
#include <iostream>
#include <thread>
#include <atomic>
#include <ctime>
#include <mutex>
using namespace std;
std::atomic_int a;
//int a;
std::mutex _mutex;
void add_() {
for (int i = 0; i < 10000; i++) {
_mutex.lock();
a++;
_mutex.unlock();
//printf("%d\n", a); //这个有点快啊 3.831
std::cout << a << std::endl;
//cout << a << endl; //有没有std速度差不多
}
}
int main()
{
clock_t startTime, endTime;
//add_(); //一条线程空跑:12.753
//atomic:11.744 下午再测 5.757s
//上锁:11.954 下午再测 5.891s
startTime = clock();//计时开始
std::thread t1(add_);
std::thread t2(add_);
t1.join();
t2.join();
endTime = clock();//计时结束
std::cout << "The run time is: " << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl;
system("pause");
return 0;
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)