看两个代码:

void function()
{ for(int i=;i>;i--)
{
cout<<"from sub thread"+i<<endl;
}
} void main()
{
thread((function()));
for(int i=;i<;i++)
{
cout<<"from main thread"+i<<endl;
} }

以上由于共用资源cout对象,而出现不规律的输出;

可以通过加入mutex对象进行加锁,需要包含头文件mutex.h

nutex mu;
void shared_printf(string fromThread,int id)
{ mu.lock();
cout<<fromThread+id<<end;
mu.unlock(); }
存在风险是cout中抛出异常将永远锁死;
这时候可以用对象:std::mutex_gard<std::mutex> gard(mu);
对象,无论cout是否成功,都将自动解锁;
具体如下:
nutex mu;
void shared_printf(string fromThread,int id)
{
std::mutex_gard<std::mutex> gard(mu);
cout<<fromThread+id<<end; } 但是以上的代码只保证了在此程序中的互斥,锁并没有完全保护住cout,存在一定的不安全性;以上问题可以通过新建立一个类,私有调用保护;

注意:线程的安全永远是相对的,根据需要控制安全级别

最新文章

  1. HDU 1848 SG函数博弈
  2. 用Kotlin开发Android应用(I):介绍
  3. java:同步和死锁
  4. Datatables带参重绘
  5. Linux 下没有 my.cnf 文件的解决方式,完全是我自己整的,好多教程都是瞎扯的 (zhuan)
  6. poj2631 树的直径 + bfs
  7. SAP_20140304
  8. [转]Install App to SD
  9. RedHat7配置Nginx实现多域名虚拟主机的SSL/TLS认证(实现单IP以不同证书服务于不同域名)
  10. b/s客户端和服务器的交互(转)
  11. spring MVC cors跨域实现源码解析
  12. PHP开发中Redis安装(CentOS6.5)
  13. linux服务器情况
  14. 让你一看就懂的快速排序算法(Java)
  15. &lt;%: Html.DisplayNameFor与 &lt;%: Html.DisplayFor的区别
  16. sprint最后冲刺-out to out
  17. python全栈开发day42-固定定位等
  18. 三:MyBatis学习总结(三)——优化MyBatis配置文件中的配置
  19. [label][翻译][JavaScript-Translation]七个步骤让你写出更好的JavaScript代码
  20. 图论-最短路径--3、SPFA算法O(kE)

热门文章

  1. 解决国内npm依赖包安装慢的问题
  2. kafka总结
  3. ES6 基础知识
  4. bash小技巧
  5. 第二篇:白话tornado源码之待请求阶段
  6. tomcat由浅入深
  7. python的__future__特性
  8. 关于sql优化的一个小总结
  9. iPhone CSS media query(媒体查询)
  10. PostgreSQL Replication之第一章 理解复制概念(1)