博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++11多线程03
阅读量:5157 次
发布时间:2019-06-13

本文共 2307 字,大约阅读时间需要 7 分钟。

首先纠正以前的错误:在没有调用join()之前,线程已经运行了。

#include 
#include
#include
void shared_print(std::string name , int num){ std::cout<
<<":"<
<
-100 ;i--) { shared_print("子线程",i); }}int main(){ std::thread t(thread_fun); for(int i=0 ;i<100;i++) { shared_print("主线程",i); }// t.join(); return 0;}

 

 

下面还是把join加上,目前这个程序输出很乱

#include 
#include
#include
void shared_print(std::string name , int num){ std::cout<
<<":"<
<
-100 ;i--) { shared_print("子线程",i); }}int main(){ std::thread t(thread_fun); for(int i=0 ;i<100;i++) { shared_print("主线程",i); } t.join(); return 0;}

 

使用基本的互斥锁,解决资源竞争,看到输出不在凌乱

#include 
#include
#include
std::mutex mu ;void shared_print(std::string name , int num){ mu.lock(); std::cout<
<<":"<
<
-100 ;i--) { shared_print("子线程",i); }}int main(){ std::thread t(thread_fun); for(int i=0 ;i<100;i++) { shared_print("主线程",i); } t.join(); return 0;}

 

改进:自动释放mu

#include 
#include
#include
std::mutex mu ;void shared_print(std::string name , int num){ //优点:guard析构时,会自动释放mu,不怕下面那句异常 //缺点:cout是全局对象,没有完全的保护起来,其他地方在加锁情况下仍然可以使用 std::lock_guard
guard(mu); std::cout<
<<":"<
<
-100 ;i--) { shared_print("子线程",i); }}int main(){ std::thread t(thread_fun); for(int i=0 ;i<100;i++) { shared_print("主线程",i); } t.join(); return 0;}

 

 

继续优化:去掉上一个程序的缺点

#include 
#include
#include
#include
class LofFile{public: LofFile() { f.open("log.txt"); } void shared_print(std::string name , int num) { std::lock_guard
locker(m_mutex) ; f<
<<": "<
<
-100 ;i--) { log.shared_print("子线程",i); }}int main(){ LofFile log ; std::thread t(thread_fun,std::ref(log)); for(int i=0 ;i<100;i++) { log.shared_print("主线程",i); } t.join(); return 0;}

 

 

转载于:https://www.cnblogs.com/guozhikai/p/6105889.html

你可能感兴趣的文章
求出斐波那契数组
查看>>
lr_start_transaction/lr_end_transaction事物组合
查看>>
CodeIgniter学习笔记(四)——CI超级对象中的load装载器
查看>>
.NET CLR基本术语
查看>>
ubuntu的home目录下,Desktop等目录消失不见
查看>>
建立,查询二叉树 hdu 5444
查看>>
[Spring框架]Spring 事务管理基础入门总结.
查看>>
2017.3.24上午
查看>>
Python-常用模块及简单的案列
查看>>
LeetCode 159. Longest Substring with At Most Two Distinct Characters
查看>>
LeetCode Ones and Zeroes
查看>>
基本算法概论
查看>>
jquery动态移除/增加onclick属性详解
查看>>
JavaScript---Promise
查看>>
暖暖的感动
查看>>
Java中的日期和时间
查看>>
Django基于admin的stark组件创建(一)
查看>>
PAT L2-016 愿天下有情人都是失散多年的兄妹
查看>>
抛弃IIS,利用FastCGI让Asp.net与Nginx在一起
查看>>
C. Tanya and Toys_模拟
查看>>