-
std::vector和std::map读写安全验证问题
STL 语义上不提供任何强度的线程安全保证。 1、vector与map都不是线程安全的:同时读OK同时写NO== 同时读写==NO 2、vector读写情况:vector一般情况下同时读写读没问题,但当vector预留内存空间不足,需要扩容导致的变量搬移时,读存在问题,同时写也存在问题,因此需要加锁,防止并发执行。 3、map读写情况:map底层结构时红黑树,每插入一个节点,map对下中数据分布就会变,因此,不可以同时写、也不能同时读写。 参考资料:1、C++ STL容器如何解决线程安全的问题?2、[C/C++标准库][初级][std::vector的多线程读写问题]·
-
草台班子
我工作以后才发现,大家都是草台班子。政府草台,企业草台,我也草台,大家都草台,凑合赚钱过日子。一个企业,看着像一台奔驰在高速公路上的豪华轿车,里面其实是几个人蹬着自行车顶个壳。路上的车都是这样,大家谁都不戳破。” 对于大多数开发团体来说,都是草台班子构成的。你几乎不要指望他们不犯错误。这就是为什么我认为软件基础设施必须开源的原因:我们需要为那些最优秀的人提供机会,让他们能分出一些精力来对草台班子搭出来的草台修修补补。
-
share_ptr加入stl
#include <string>#include <vector>#include <memory>#include <map> template <class T>using SPVEC = std::vector<std::shared_ptr<T>>; template <class T1, class T2>using SPMAP = std::map<T1, std::shared_ptr<T2>>; const size_t LEN = 1024 * 1024 ; class TestUnit{public: TestUnit(int _id); ~TestUnit(); private: int m_id; std::string m_buf;}; TestUnit::TestUnit(int _id):m_id(_id){ m_buf.resize(LEN, 0); printf(“%d construction\n”,m_id);} TestUnit::~TestUnit(){ printf(“%d destruction\n”, m_id);} int main(int argc, char** argv) { { […]