boost中实现线程安全

FlyingGod FlyingGod     2022-10-06     715

关键词:

博客转载自: http://www.cnblogs.com/lvdongjie/p/4447142.html

1 boost原子变量和线程

#include <boost/thread.hpp>
using namespace boost;
using namespace std;

mutex io_mu; // 定认全局互斥变量

/*
* 模板类: 线程安全的计数器,不可拷贝
*/
template<typename T>
class basic_atom : noncopyable
{
private:
    T n;
    mutex mu;
public:
    basic_atom(T x = T()) :n(x) {}
    T operator++() {
        mutex::scoped_lock lock(mu);  //用scoped_lock锁住成员互斥信号变量
        return ++n;
    }
    operator T() { return n; }
};

typedef basic_atom<int> atom_int;  // 将模板类定义精简名atom_int

int to_interrupt(atom_int& x, const string& str)
{
    try
    {
        for (int i = 0; i < 9; ++i)
        {
            this_thread::sleep(posix_time::seconds(1));  // 此处应该是子线程sleep1秒
            mutex::scoped_lock lock(io_mu); //io流非线程安全,必须锁住
            cout << str << ": " << ++x << endl;
        }
    }
    catch (thread_interrupted&)
    {
        cout << "thread interrupted" << endl;
        return -1;
    }

    return 0;
}

int main()
{
    atom_int x;
    thread t(to_interrupt, boost::ref(x), "hello"); // t调用to_interrupt函数,并输出hello x
    this_thread::sleep(posix_time::seconds(3)); //此处应该是主线程睡眠3秒
    t.interrupt();  // 调用线程的中断操作
    t.join();  // 因为线程已中断,所以线程立即返回

    getchar();
    return 0;
}

 

t.join()作用
一句话:把当前线程合并到主线程
详细点:
程序的入口点是Main函数
主程序定义了一个线程,这个线程是执行一个延时输出“--”的函数
如果没有这句join,那么程序就会一边执行输出“--”一边执行主程序下面的代码
有了这个join 意思就是大家都在一条线上了,我执行完了才轮到主程序执行。

 

通过锁定在 Java 中实现线程安全的 ArrayList

】通过锁定在Java中实现线程安全的ArrayList【英文标题】:Implementathread-safeArrayListinJavabylocking【发布时间】:2018-03-0807:07:12【问题描述】:我想写一个简单的线程安全数组列表,它支持:add()、remove(inti)、insert(inti)、update(inti)和get... 查看详情

线程安全在Java中实现单例模式的有效方法? [复制]

】线程安全在Java中实现单例模式的有效方法?[复制]【英文标题】:ThreadSafeEfficientwaytoimplementsingletonpatterninJava?[duplicate]【发布时间】:2011-05-2719:42:06【问题描述】:可能重复:EfficientwaytoimplementsingletonpatterninJava我正在阅读这个Be... 查看详情

如何在 Swift 中实现线程安全的 HashTable (PhoneBook) 数据结构?

】如何在Swift中实现线程安全的HashTable(PhoneBook)数据结构?【英文标题】:HowtoimplementaThreadSafeHashTable(PhoneBook)DataStructureinSwift?【发布时间】:2018-08-1214:32:48【问题描述】:我正在尝试实现一个线程安全的电话簿对象。电话簿应该... 查看详情

以下 C++ 代码中实现的 DCL(双重检查锁定)是不是是线程安全的?

】以下C++代码中实现的DCL(双重检查锁定)是不是是线程安全的?【英文标题】:IstheDCL(double-checkedlocking)implementedinthefollowingC++codethread-safe?以下C++代码中实现的DCL(双重检查锁定)是否是线程安全的?【发布时间】:2020-05-0812:57... 查看详情

在 C++11 中实现 boost::optional

】在C++11中实现boost::optional【英文标题】:Implementingboost::optionalinc++11【发布时间】:2012-08-0604:25:37【问题描述】:我正在尝试使用c++11特性实现类似数据结构的boost::optional。这是我到目前为止所拥有的:template<typenameT>structmay... 查看详情

在 C++ 中实现高效的多线程文件 I/O

】在C++中实现高效的多线程文件I/O【英文标题】:ImplementingefficientmultithreadedfileI/OinC++【发布时间】:2011-11-0523:08:21【问题描述】:我目前正在开发一个自定义跨平台文件服务器(C++,boost)。显然,它会大量对HDD进行读取和写入... 查看详情

在 C++ 中实现通用堆栈

】在C++中实现通用堆栈【英文标题】:Implementinggenericstackinc++【发布时间】:2016-02-2312:14:21【问题描述】:我正在使用STL和boost库实现通用堆栈数据结构。#include<iostream>#include<cstdio>#include<stack>#include<boost/any.hpp>#i... 查看详情

boost::asio::socket 线程安全

】boost::asio::socket线程安全【英文标题】:boost::asio::socketthreadsafety【发布时间】:2011-11-1320:12:47【问题描述】:(这是我原来问题的简化版)我有几个线程写入boostasio套接字。这似乎工作得很好,没有问题。文档说共享套接字不... 查看详情

如何在 C# 中实现 Base64 URL 安全编码?

】如何在C#中实现Base64URL安全编码?【英文标题】:HowtoachieveBase64URLsafeencodinginC#?【发布时间】:2014-12-0819:52:09【问题描述】:我想在C#中实现Base64URL安全编码。在Java中,我们有一个通用的Codec库,它为我提供了一个URL安全编码字... 查看详情

我可以使用 boost::threadpool 作为“线程安全队列”吗?

】我可以使用boost::threadpool作为“线程安全队列”吗?【英文标题】:Caniuseboost::threadpoolasa\'thread-safequeue\'?【发布时间】:2011-01-0123:35:09【问题描述】:我需要的实际上是一个线程安全的队列结构,其中多个客户端不断将数据转... 查看详情

如何在火花聚合函数中实现scala类型安全

】如何在火花聚合函数中实现scala类型安全【英文标题】:Howtoimplementscalatypesafetyinsidesparkaggregationfunction【发布时间】:2021-09-1322:34:45【问题描述】:如何对agg函数中聚合的值实现类型安全?我的目标是在运行前进行类型检查。$&... 查看详情

在 C++ 中实现 C++ 线程库

】在C++中实现C++线程库【英文标题】:ImplementingaC++threadingLibraryinc++【发布时间】:2009-02-1106:29:26【问题描述】:我是一名java程序员,但目前正在使用c++语言。与java不同,c++没有定义任何线程实用程序。在C++中实现多线程应用程... 查看详情

boost::python - 如何从 C++ 在自己的线程中调用 python 函数?

...述】:我有一个用python编写的模块。这个模块是我在Python中实现的许多不同功能的接口:EmbeddingInterface.py只是导入这个模块并创建一个实例 查看详情

如何在 C# 中实现线程关联?

】如何在C#中实现线程关联?【英文标题】:HowdoIimplementthreadaffinityinC#?【发布时间】:2017-12-1422:09:33【问题描述】:我有一个需要线程关联的第三方API。我在我的服务应用程序中使用WCF来处理来自客户端的请求,然后将这些请求... 查看详情

java示例代码_如何在Java中实现安全的静态登录凭据系统

java示例代码_如何在Java中实现安全的静态登录凭据系统 查看详情

如何在 Flutter 中实现音频流应用和安全存储

】如何在Flutter中实现音频流应用和安全存储【英文标题】:Howtoimplementaudiostreamingappandsecurestorageinflutter【发布时间】:2019-11-0603:57:38【问题描述】:我现在要使用颤振https://play.google.com/store/apps/details?id=deezer.android.app构建像deezer... 查看详情

java示例代码_在Java中实现多线程池

java示例代码_在Java中实现多线程池 查看详情

如何在 angularjs 应用程序中实现安全(!)身份验证系统?

】如何在angularjs应用程序中实现安全(!)身份验证系统?【英文标题】:HowtoachieveaSafe(!)authenticationsysteminanangularjsapp?【发布时间】:2013-01-2507:52:29【问题描述】:我是angularjs新手...我阅读了文档,并完成了教程;我自己也尝试... 查看详情