`
mylove2060
  • 浏览: 335333 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Boost - 多线程-boost recursive_mutex用法

阅读更多

Author:QQ174554431

比较一下,就知道这个函数怎么用,效果如何.


#include <iostream>  
 
void run()
{  
	for (int i = 0; i < 10; ++i)  
	{  
		std::cout << i << std::endl;  
	}  
}  


  
int main(int argc, char* argv[])  
{  
	boost::thread theard1(&run);  
	boost::thread theard2(&run);  
	boost::thread theard3(&run); 
	theard1.join();  
	theard2.join();  
	theard3.join(); 
	return 0;  
}  



结果:
0
1
2
3
00


11


22


37

48

59

6
37
4
8
5
9
6

7
8
9

杂乱无章的,一个线程执行输出时被其他线程干扰.


#include <boost/thread/thread.hpp>  
#include <boost/thread/recursive_mutex.hpp>
#include <iostream>  

boost::recursive_mutex io_mutex;  
 
void run()
{  
	for (int i = 0; i < 10; ++i)  
	{  
		boost::recursive_mutex::scoped_lock  lock(io_mutex);
		std::cout << i << std::endl;  
	}  
}  


  
int main(int argc, char* argv[])  
{  
	boost::thread theard1(&run);  
	boost::thread theard2(&run);  
	boost::thread theard3(&run); 
	theard1.join();  
	theard2.join();  
	theard3.join(); 
	return 0;  
}  




结果:
0
1
2
3
4
5
6
7
8
9
0
1
0
2
1
3
4
5
6
2
7
3
4
8
5
9
6
7
8
9

输出时锁定, 就不会杂乱无章节.








#include <boost/thread/thread.hpp>  
#include <boost/thread/recursive_mutex.hpp>
#include <iostream>  

boost::recursive_mutex io_mutex;  
 
void run()
{  
	boost::recursive_mutex::scoped_lock  lock(io_mutex);
	for (int i = 0; i < 10; ++i)  
	{  
		std::cout << i << std::endl;  
	}  
}  


  
int main(int argc, char* argv[])  
{  
	boost::thread theard1(&run);  
	boost::thread theard2(&run);  
	boost::thread theard3(&run); 
	theard1.join();  
	theard2.join();  
	theard3.join(); 
	return 0;  
}  



结果:
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

当一个线程被Lock,其他线程只能等待.




分享到:
评论

相关推荐

    Recursive-seek-integer-reverse.rar_reverse recursive_seek

    "Recursive-seek-integer-reverse.rar_reverse recursive_seek"这个标题暗示我们,它涉及到使用递归算法来实现一个特定的功能,即反转整数的顺序。描述中提到的例子,输入12345,输出54321,进一步确认了我们要讨论...

    Recursive-Gaussian-filter.rar_recursive gaussian

    然而,递归方法可能引入一定的误差积累,尤其是在多次迭代后,因此在实际应用中需要权衡滤波效果与计算效率。 在实际使用"opencv.cpp"中的代码时,开发者可能需要根据自己的需求调整高斯滤波器的参数,如标准差、...

    Recursive_recursive_

    标题"Recursive_recursive_"和描述"Introduction to recursive programming"都指向了递归编程的主题,这是计算机科学中的一个核心概念。下面我们将深入探讨递归编程的基础、原理以及如何在实际编程中应用。 递归的...

    boost线程指南手册

    - `boost::try_mutex`和`boost::recursive_try_mutex`已被移除,相关功能集成至`boost::mutex`和`boost::recursive_mutex`中。 - `boost::detail::thread::lock_ops`已移除,互斥类型的`lock()`和`unlock()`成员函数...

    True-motion estimation with 3-D recursive

    在图像插帧领域中对真实运动向量进行估计的算法,此算法较为经典,3DRS

    hannuota.rar_Hanoi_non-recursive_hannuota_汉诺塔_汉诺塔-递归算法_递归 非递归

    汉诺塔问题是一个经典的计算机科学问题,源自一个古老的印度传说。该问题涉及到三根柱子和一堆盘子,目标是将所有盘子从第一根柱子(A柱)...通过阅读这些文件,你可以更深入地理解并实践非递归解决汉诺塔问题的方法。

    ljung_soderstrom_-_theory_and_practice_of_recursive_identification

    递推辨识理论与应用,英文版 这本书提供了一个发展全面系统...这种方法,这也被认为是连续的自适应算法或参数估计的方法众所周知,可应用于在线,自适应系统广泛,如信号处理,预测或控制装置,并在建模通用系统有用。

    Recursive_Wang_Tiles_For_Real-Time_Blue_Noise

    而递归王瓷砖则是在这一基础上进行了扩展,允许瓷砖在多尺度上进行自相似的组合,从而产生更为复杂的图案。这种方法在实时渲染中特别有用,因为它能够快速生成高质量的随机性,同时保持良好的视觉效果。 源代码文件...

    Python应用实战:python多线程-多线程安全问题&lock与rlock.zip

    本篇文章将深入探讨Python中的多线程安全问题以及如何使用锁(Lock)和可重入锁(RLock)来解决这些问题。 首先,我们要理解什么是线程安全。线程安全是指在多线程环境下,一个函数或方法被多个线程调用时,不会...

    First-root-traversal-non-recursive.zip_ROOT

    对于递归实现,这个过程很容易理解,但非递归实现可能需要更多的思考和技巧。 非递归的先根遍历可以通过栈来实现。这种实现方式的核心思想是模拟递归调用的过程。首先,我们将根节点压入栈中。然后,我们进入一个...

    DetectoRS_Detecting_Objects_with_Recursive_Featur_DetectoRS.zip

    DetectoRS_Detecting_Objects_with_Recursive_Featur_DetectoRS

    Super-Recursive Algorithms_C++_algorithms_

    《Super-Recursive Algorithms》这本书深入探讨了C++编程语言中的超级递归算法,这是一类在计算理论和算法设计中至关重要的技术。超级递归不仅仅是简单的递归调用,它涉及到了更复杂的数学和计算机科学概念,如元...

    boost.thread.1.3.5中文翻译

    Boost.Thread是Boost库中的一个重要组成部分,它允许开发人员使用便携的C++代码来处理多线程编程,尤其在涉及共享数据的情况下。以下是从标题、描述和部分文档内容中提炼出的关键知识点: ### Boost.Thread 1.3.5...

    dict-recursive-update:一个执行递归更新的Python模块处理2个字典

    用法安装pip install dict-recursive-update例子 &gt;&gt; &gt; from dict_recursive_update import recursive_update&gt;&gt; &gt; recursive_update ({ 'a' : { 'b' : 2 }}, { 'a' : { 'b' : 3 , 'd' : 4 }, 'e' : 5 }){ 'a' : { 'b'...

    分形维数计算matlab代码-recursive_integration:recursive_integration

    如果计算出的有效波高与观测数据相比太大,则尝试使用更多的级联来耗散更多的能量。 如果将风插值用于频谱解析模型,请使用4-7级联生成完整的u10,然后在与模型时间步长相对应的窗口上求平均值。 例如,如果时间步长...

    ripgrep-13.0.0-x86_64-unknown-linux-musl.tar.gz

    2. **多线程**:`ripgrep` 利用多核处理器的优势,可以并行处理文件,提高搜索速度。 3. **忽略文件**:它支持 `.gitignore` 和 `.ignore` 文件,这意味着它可以自动忽略版本控制系统定义的不需要搜索的文件和目录...

    MFCACE多线程demo

    在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Class)与ACE(Adaptive Communication Environment)库来实现多线程编程。MFC是微软提供的一个C++类库,用于简化Windows应用程序开发,而ACE则是一个跨...

    huffman_encoder.rar_Huffman recursive_matlab encoder

    在MATLAB环境中,我们可以使用递归函数来实现哈夫曼编码,这也是本压缩包文件“huffman_encoder.rar_Huffman recursive_matlab encoder”的核心内容。 一、哈夫曼编码的基本原理 1. 哈夫曼树构建:首先,我们需要...

    wget-1.14-15.el7.x86_64.rpm

    2. **递归下载**:`-r`或`--recursive`选项可以递归地下载整个网站或目录。 3. **断点续传**:`-c`或`--continue`选项允许在下载中断后从上次停止的地方继续。 4. **镜像下载**:`-m`或`--mirror`选项结合递归下载...

Global site tag (gtag.js) - Google Analytics