zoukankan      html  css  js  c++  java
  • C++多线程编程

     C++的多线程不同于C语言的多线程,对于我这个从C转向C++的来说更是觉得很难理解;来新公司的这段时间也是一直在思考这方面的事情,近期一直在检查程序中死锁的问题;就总结以下最近对于C++多线程编程的心得吧。

          C++的多线程主要体现在两方面,一方面是对于全局数据的线程同步。我们看下面的实例

          首先我们封装一个Thread类

    Thread.h 文件

    View Code

    Thread.cpp 文件

    View Code

          然后我们新建MyThread类,继承自Thread类,以实现不同的算法。

    MyThread.h

    View Code

    MyThread.cpp

    View Code

    main.cpp

    View Code

    Makefile文件,写的不好,大家见谅啊

    View Code

           make并且运行之后,看下运行情况 为了节省空间我只给出了几个数据,有兴趣大家可以展示以下

    View Code

          线程1和2交替在终端打印,但是如果我们添加互斥量(相当于是对终端访问的互斥量)之后会出现什么情况呢?

    我们修改MyThread.cpp文件如下

    View Code

    我们可以运行一下看下打印信息,没有数据的冲突,因为数据量太大,在此不列出。

          C++封装的概念使不同对象之间的私有数据不会交错,这个概念是我这个从C转向C++一直无法理解,尤其是在遇见多线程的情况下,但是这并不表明私有数据不需要加锁,因为可能涉及到类中不同的方法在同时访问或者修改数据。看下面的例子

          我们将main.cpp文件修改如下,

    View Code

          将MyThread.cpp文件中的run函数也略作修改

    View Code

          大家可以看下运行结果,在这里就不作详细说明;

          为了解决上述的冲突,我们需要在类中添加锁,为了我们修改MyThread.h MyThread.cpp 和 main.cpp函数

    MyThread.h文件   

    View Code

    MyThread.cpp文件

    View Code

    main.cpp 文件

    View Code

           有兴趣的读者可以看下运行效果,在添加了类内部锁之后,有效的实现了数据的同步。

           欢迎讨论。 

    c/c++

     
     
    posted @ 2012-03-26 14:18 archy_yu 阅读(291) | 评论 (5) 编辑
     
     
    posted @ 2012-03-11 17:03 archy_yu 阅读(8) | 评论 (0) 编辑
     
     
    posted @ 2011-08-07 22:50 archy_yu 阅读(140) | 评论 (2) 编辑
  • 相关阅读:
    响应式开发
    webstrom配置
    CSS水平垂直居中
    CSS3里的 转换与过渡动效
    CSS布局
    CSS定宽居中的实现方案
    Flex布局篇2
    编辑器中快速生成代码——emmet输入法
    display:flex实践加感悟
    websocket connet.js
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2418093.html
Copyright © 2011-2022 走看看