利用boost::mutex实现线程安全列表模板类,附源码及使用例子
来源:互联网 发布:2016最流行的网络用语 编辑:程序博客网 时间:2024/06/09 16:41
std::list本身不具备线程安全功能,本文利用开源库boost的互斥体类mutex实现一个带互斥功能的线程安全列表模板类。
#include "list"
#include <boost/thread.hpp>
template<typename T>
class CLockList
: public std::list<T>
{
protected:
boost::mutex m_mutex;
};
void add(T t)
{
boost::mutex::scoped_lock lock(m_mutex);
std::list<T>::push_back(t);
}
bool front(T & out, bool is_pop = true)
{
boost::mutex::scoped_lock lock(m_mutex);
typename std::list<T>::iterator pIter = std::list<T>::begin();
if (pIter == std::list<T>::end())
return false;
out = *pIter;
if (is_pop)
std::list<T>::pop_front();
return true;
}
void clear(bool is_lock = true)
{
if (is_lock)
{
boost::mutex::scoped_lock lock(m_mutex);
std::list<T>::clear();
}else
{
std::list<T>::clear();
}
}
// locklist.h file here
#ifndef __locklist_h__
#define __locklist_h__
#include "list"
#include "stldef.h"
#include <algorithm>
#include <boost/thread.hpp>
class CLockList
: public std::list<T>
{
protected:
boost::mutex m_mutex;
boost::mutex & mutex(void) {return m_mutex;}
const boost::mutex & mutex(void) const {return m_mutex;}
{
boost::mutex::scoped_lock lock(m_mutex);
std::list<T>::push_back(t);
}
bool front(T & out, bool is_pop = true)
{
boost::mutex::scoped_lock lock(m_mutex);
typename std::list<T>::iterator pIter = std::list<T>::begin();
if (pIter == std::list<T>::end())
return false;
if (is_pop)
std::list<T>::pop_front();
return true;
}
{
if (is_lock)
{
boost::mutex::scoped_lock lock(m_mutex);
std::list<T>::clear();
}else
{
std::list<T>::clear();
}
}
CLockList(void)
{
}
~CLockList(void)
{
clear();
}
};
#endif // __locklist_h__
4 简单使用例子,假设有一个用户信息类CUserInfo,基本使用例子如下:
int main(void)
{
// 定义用户列表
CLockList<CUserInfo> m_users;
// 用户信息实例
CUserInfo user1;
CUserInfo user2;
// 添加
m_users.add(user1);
m_users.add(user2);
// 循环取出
CUserInfo userInfo;
while (m_users.front(userInfo))
{
// ...
}
m_users.clear();
}
- 利用boost::mutex实现线程安全列表模板类,附源码及使用例子
- linux 线程安全 mutex 锁的使用
- boost mutex lock 使用
- BOOST mutex 线程锁封装
- Mutex及例子
- 使用模板实现单例模式(线程安全)
- 谈mutex的使用和线程安全、可重入
- Android仿微信下拉列表实现(附源码)
- Android仿微信下拉列表实现(附源码)
- 使用boost线程池很好的例子
- Linux利用mutex互斥锁实现线程的互斥
- boost::mutex的最简单的例子
- boost: Mutex、scoped_lock 使用方式
- 线程安全1:定义及例子
- 线程安全1:定义及例子
- 简单单体模板类的实现(非线程安全)
- 模板类高效线程安全的实现Queue
- ThreadLocal实现线程安全的经典例子
- CSDN第一篇
- 激情人生
- 教育就是养成10个良好习惯
- 关于数据库
- JSP Filter
- 利用boost::mutex实现线程安全列表模板类,附源码及使用例子
- 好好学习
- 额。。。BUG消失了。。
- 读《重构与模式》所想(二)
- 新加入
- 物联网将带着诚意扑面而来
- 新人报道
- AVL树的删除探讨
- 学习STM32