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) 编辑
原文地址:https://www.cnblogs.com/Leo_wl/p/2418093.html