好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C++多线程编程

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++

 

C++多线程编程

 

posted @  2012-03-26 14:18  archy_yu 阅读(291) |  评论 (5)   编辑

 

杂记

 

posted @  2012-03-11 17:03  archy_yu 阅读(8) |  评论 (0)   编辑

 

用c++写的一个词典工具

 

posted @  2011-08-07 22:50  archy_yu 阅读(140) |  评论 (2)   编辑

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于C++多线程编程的详细内容...

  阅读:42次