使STL容器线程安全的类(转载)

原创 2005年04月23日 08:54:00
// ThreadSafeObject.h 
//  ThreadSafeObject by David Maisonave (609-345-1007) (www.axter.com)
/*
Description:ThreadSafeObject is a thread safe wrapper class, 
which uses windows API Critical-Section logic. 
It can turn any object into a thread safe object.
ThreadSafeObject destructor will automatically destroy the object,
so the object can be create via new on ThreadSafeObject constructor.
This insures no other process has ownership of the object.
Example Usage
ThreadSafeObject<vector<int> > MyThreadSafeVectorInt(new vector<int>);
MyThreadSafeVectorInt.GetLockedObject()->push_back(123);
cout << MyThreadSafeVectorInt.GetLockedObject()->at(0) << endl;

//An instance of RefLock can be create to lock the object for the duration of a function.
Example Usage
ThreadSafeObject<string> MyThreadSafeString(new string);

string SomeFunction()
{
ThreadSafeObject<string>::RefLock MyLockedString = MyThreadSafeString.GetLockedObject();
MyLockedString->operator=("Hello World");
return MyLockedString->substr(6);
}

//The destructor for RefLock automatically unlocks the object, so an explicit unlock call
//is not required.
*/

#ifndef THREADSAFEOBJECT_H_HEADER_GUARD_
#define THREADSAFEOBJECT_H_HEADER_GUARD_

template<class T>
class ThreadSafeObject
{
public:
     ThreadSafeObject(T* type):m_type(type){InitializeCriticalSection(&m_cs);}
     ~ThreadSafeObject()
     {
          EnterCriticalSection (&m_cs);
          delete m_type;m_type=NULL;
          LeaveCriticalSection(&m_cs);
          DeleteCriticalSection(&m_cs);
     }
     class RefLock
     {
     public:
          RefLock(T* type, CRITICAL_SECTION &cs):m_type(type), m_cs(cs){ EnterCriticalSection (&m_cs);}
          RefLock(const RefLock& Src):m_type(Src.m_type), m_cs(Src.m_cs){ EnterCriticalSection (&m_cs);}
          ~RefLock(){LeaveCriticalSection(&m_cs);}
          inline T* operator->() const{return m_type;}
          inline T& operator*() const{return m_type;}
          T* m_type;
     private:
          CRITICAL_SECTION &m_cs;
     };
     RefLock GetLockedObject()
     {
          return RefLock(m_type, m_cs);
     }
private:
     T* m_type;
     CRITICAL_SECTION m_cs;
     ThreadSafeObject(const ThreadSafeObject&);
     ThreadSafeObject& operator=(const ThreadSafeObject&);
};

#endif //!THREADSAFEOBJECT_H_HEADER_GUARD_

STL容器的线程安全?

接上一篇STL容器删除操作继续,STL使用起来方便,还有自动内存管理,再结合合适的泛型算法大大提高了我们编程的效率,于是我们“肆无忌惮”的使用在自己的程序中。但是只要你有“肆无忌惮”的态度,你终归是要...
  • u012730075
  • u012730075
  • 2013年11月05日 16:32
  • 1075

关于STL容器的线程安全特性

标准C++的世界是相当保守和精简的。在这个纯洁的世界,所有可执行文件都是静态链接的。不存在内存映射文件和共享内存。没有窗口系统,没有网络,没有数据库,没有进程。在这种情况下,当发现标准没有提到任何关于...
  • gaokewoo
  • gaokewoo
  • 2014年04月26日 21:51
  • 879

C++ STL容器线程安全的模版类

STL的容器都是非线程安全的,模仿JDK,写了一个通用的线程安全的模版类 template > class TC_ThreadQueue : protected TC_ThreadLock { ...
  • turkeyzhou
  • turkeyzhou
  • 2013年04月01日 11:20
  • 3255

STL容器不是线程安全的

容器线程安全
  • he11ohell0
  • he11ohell0
  • 2015年06月09日 18:21
  • 1032

对STL容器线程安全性的期待现实一些

转自:http://www.cnblogs.com/juncheng/articles/1600728.html 标准C++的世界是相当保守和陈旧的。在这个纯洁的世界,所有可执行文件都是静 ...
  • malizhchxiaozi
  • malizhchxiaozi
  • 2015年03月11日 18:32
  • 455

java线程安全的容器类

四、线程安全的容器类Java编码中,我们经常需要用到容器来编程。在并发环境下,Java提供一些已有容器能够支持并发。1.Map在Map类中,提供两种线程安全容器。 java.util.Hashtabl...
  • Snail_Ren
  • Snail_Ren
  • 2016年07月20日 16:23
  • 4432

STL容器类的继承

 STL容器类的继承     即时创建一个元素序列的能力是惊人的,它实现了你过去可能会花费(或者更确切的是浪费)多少时间才能解决这个特定的问题。例如,许多实用程序都涉及将文件读到内存,修改文件然后将它...
  • xylary
  • xylary
  • 2007年08月01日 16:33
  • 2796

STL-----线程安全

由于STL不是线程安全的, 所以在每一次插入元素,删除元素,读取元素时,必须保证原子操作.  读取元素也许要原子? 嗯,是的. 因为你得到了一个迭代器后, 这个迭代器对应的容器可能被别的线程修改!...
  • a2796749
  • a2796749
  • 2015年07月30日 09:19
  • 877

STL容器的size()函数的一个容易忽略的点

STL容器的size()函数会返回容器里面的元素个数,它的类型是size_t,即无符号整型。而我之前没有留意这个,以为是整型,然后在一份代码中写了如下代码,找bug找了很久。。。 for(int i...
  • u014088857
  • u014088857
  • 2016年02月18日 11:29
  • 644

C++编程 –安全并发访问容器元素

C++ 安全并发访问容器元素 2014-9-24 flyfish 标准库STL的vector, deque, list等等不是线程安全的 例如  线程1正在使用迭代器(iterator)读vecto...
  • flyfish1986
  • flyfish1986
  • 2014年09月24日 18:06
  • 5906
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使STL容器线程安全的类(转载)
举报原因:
原因补充:

(最多只允许输入30个字)