使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学习笔记之容器线程安全

考虑下列代码。它搜寻一个vector中第一次出现5这个值的地方,而且,如果它找到了,就把这个值改为0。 vector v; vector::iterator first5(find(v.begin(...

不同容器类是否线程安全

各个不同的容器类是否线程安全
  • ivyxjc
  • ivyxjc
  • 2016年11月26日 17:16
  • 274

基于Java容器类的线程安全编程

Collection  ├List      接口 │├LinkedList      链表 │├ArrayList        顺序结构动态数组类 │└Vector        向量 ...

java线程安全的容器类

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

java线程安全之同步类容器与并发类容器(十二)

java线程安全之同步类容器与并发类容器(十二)

STL-----线程安全

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

STL的线程安全解决方案.

  由于STL不是线程安全的, 所以在每一次插入元素,删除元素,读取元素时,必须保证原子操作.  读取元素也许要原子? 嗯,是的. 因为你得到了一个迭代器后, 这个迭代器对应的容器可能被别的...

谈C++线程安全容器的设计

最近看到一本书,《C++并发编程实战》,[美] Anthony Williams 著,里面有谈及线程安全容器的设计及实现代码,本人觉得这样的设计有点问题,问题还是比较明显的,写在这里,供读者自己思考吧...

同步容器(如Vector)并不是所有操作都线程安全!

转载 2017年06月15日 16:52:43 标签:java /线程安全 这里是网友们的回答 @赵鹏: size方法和get方法,如果集合的长度...

同步容器(如Vector)并不是所有操作都线程安全!

这里是网友们的回答 @赵鹏: size方法和get方法,如果集合的长度变化了,可能抛出异常, @aold619: 去网上查了资料:“有条件的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使STL容器线程安全的类(转载)
举报原因:
原因补充:

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