为什么线程安全的ACE容器不支持[]操作符
2023-09-14 08:57:59 时间
记得当初刚加入游戏服务端这个行业的时候,有一个老手曾经问我,知道stlmap容器和ACEmap容器有什么不同吗?当时的我对于C++多线程还有很多的不解和迷惑、便摇摇头说不知道,他告诉我说,ACEmap容器是线程安全的,而stlmap容器则不是。当时的我蒙蒙东东,等到真正自己在使用stlmap,由于跨线程造成coredump时,才真正理解了线程安全和线程不安全的区别。
越到后来越想自己也封装一个线程安全的stl库,在封装的过程中遇见了下面的问题。比如我们小范围的封装一下stl的vector库:
class vectorEx public: vectorEx() data.resize(100); int operator[](const size_t x) if(x 0) return data[0]; cout "const has been called" endl; return data[x]; int insert(int index,int value) if(index 0) return -1; this- mutex_lock(); data[index] = value; this- mutex_unlock(); return 0; int size() const return data.size(); int capacity() const return data.capacity(); vector int ::const_iterator begin()const return data.begin(); vector int ::const_iterator end()const return data.end(); int mutex_lock() return pthread_mutex_lock( this- _self_mutex); int mutex_unlock() return pthread_mutex_unlock( this- _self_mutex); private: vector int data; pthread_mutex_t _self_mutex; };对于[]操作符我们是无法加锁解锁的,所以我想ACE的大师们,使用了bind()函数去封装。
int bind(const size_t index,int value) if(index 0) return -1; this- mutex_lock(); data[index] = value; this- mutex_unlock(); return 0; }于insert函数类似,当然我没有使用模板,对于模板还是不太熟悉。
C++ STL容器如何解决线程安全的问题? 众所周知,STL容器不是线程安全的。对于vector,即使写方(生产者)是单线程写入,但是并发读的时候,由于潜在的内存重新申请和对象复制问题,会导致读方(消费者)的迭代器失效。实际表现也就是招致了core dump。另外一种情况,如果是多个写方,并发的push_back(),也会导致core dump。
Java 中的线程安全容器 常用的一些容器例如 ArrayList、HashMap、都不是线程安全的,最简单的将这些容器变为线程安全的方式,是给这些容器所有的方法都加上 synchronized 关键字。
一、为什么会出现同步容器? 在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。 List、Set、Queue接口分别继承了Collection接口,Map本身是一个接口。
Java ,单实例 多线程 ,web容器,servlet与struts1-2.x系列,线程安全的解决 1.Servlet是如何处理多个请求同时访问呢? 回答:servlet是默认采用单实例,多线程的方式进行。只要webapp被发布到web容器中的时候,servlet只会在发布的时候实例化一次,servlet在其生命周期中只有在将项目给移除或服务器stop的时候才会销毁,那么一个web项目从发布到运行只存在一个servlet的实例。
Docker的容器管理 docker run 等于创建+启动 docker run 镜像名,如果镜像不存在本地,则会在线去下载该镜像。 注意:容器内的进程必须处于前台运行状态,否则容器就会直接退出,自己部署一个容器运行,命令不得后台运行,前台运行即可。 如果容器内,什么事也没做,容器也会挂掉。容器内,必须有一个进程在前台运行。 我们运行nginx基础镜像,没有运行任何程序,因此容器直接挂掉 docker run nginx
容器技术-Docker的优点 当产品运行在内部的虚拟化平台中,如openstack,也就是KVM虚拟化,创建虚拟机,但是不断增加的云端应用,增加了对硬件资源的消耗,不断的创建虚拟机,消耗了大量的硬件资源。 那么如何高效的利用硬件资源实现云服务呢
相关文章
- Jenkins之自动部署、代码安全扫描、自动化接口测试
- 【华为云技术分享】容器与虚拟化的结合:浅谈“安全容器”技术发展趋势
- php安全字段和防止XSS跨站脚本攻击过滤函数
- 让容器应用管理更快更安全,Dragonfly 发布 Nydus 容器镜像加速服务
- 当 Kubernetes 遇到机密计算,阿里巴巴如何保护容器内数据的安全?
- 安全容器的发展与思考
- 是否只查看安全传送的网页内容? 去掉 IE弹出窗口
- 常用的shell脚本(安全方向)
- 【网站安全】网站被挂木马与777权限的奥妙
- 【转载】从Docker容器漏洞谈Docker安全
- 【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息 | retrace.bat 命令执行目录 | 暴露更少信息 )
- Python安全 - 从SSRF到命令执行惨案
- Kubernetes基础自学系列 | Kubernetes集群安全 - 鉴权
- 100集华为HCIE安全培训视频教材整理 | DSVPN配置细则(三)
- 通过Hadoop安全部署经验总结,开发出以下十大建议,以确保大型和复杂多样环境下的数据信息安全。
- 打开Word文档的时候提示 “安全警告 宏已被禁用”
- Docker 容器安全(1):我的容器真的需要privileged权限吗?
- Kubernetes SecurityContext 安全上下文 容器添加禁用内核功能及阻止对容器根文件系统的写入
- Kubernetes 最小化微服务漏洞 安全沙箱运行容器:gVisor介绍与安装
- 第四篇:synchronized,并发安全的守护神
- 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题——MYSQL安全测试解析(详细)