当C++遇到IOS应用开发---LRUCache缓存

来源:未知 责任编辑:责任编辑 发表时间:2014-01-20 07:51 点击:

       考虑到缓存实现多数使用单例模式,这里使用C++的模版方式设计了一个Singlton基类,这样以后只要继承该类,子类就会支持单例模式了。其代码如下:
 
[cpp] 
// 
//  SingltonT.h 
// 
 
#ifndef SingltonT_h 
#define SingltonT_h 
#include <iostream> 
#include <tr1/memory> 
using namespace std; 
using namespace std::tr1; 
template <typename T> 
class Singlton { 
public: 
      static T* instance(); 
      ~Singlton() { 
          cout << "destruct singlton" << endl; 
      } 
protected: 
      Singlton(); 
//private: 
protected: 
      static std::tr1::shared_ptr<T> s_instance; 
      //Singlton(); 
}; 
 
template <typename T> 
std::tr1::shared_ptr<T> Singlton<T>::s_instance; 
  
template <typename T> 
Singlton<T>::Singlton() { 
    cout << "construct singlton" << endl; 

  
template <typename T> 
T* Singlton<T>::instance() { 
    if (!s_instance.get()) 
        s_instance.reset(new T); 
    return s_instance.get(); 

 

       另外考虑到在多线程下对static单例对象进行操作,会出现并发访问同步的问题,所以这里使用了读写互斥锁来进行set(设置数据)的同步。如下:
[cpp] 
#ifndef _RWLOCK_H_ 
#define _RWLOCK_H_ 
 
#define LOCK(q) while (__sync_lock_test_and_set(&(q)->lock,1)) {} 
#define UNLOCK(q) __sync_lock_release(&(q)->lock); 
 
struct rwlock { 
    int write; 
    int read; 
}; 
 
static inline void 
rwlock_init(struct rwlock *lock) { 
    lock->write = 0; 
    lock->read = 0; 

 
static inline void 
rwlock_rlock(struct rwlock *lock) { 
    for (;;) {//不断循环,直到对读计数器累加成功 
        while(lock->write) { 
            __sync_synchronize(); 
        } 
        __sync_add_and_fetch(&lock->read,1); 

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Lexical or Preprocessor Issue 'xxx.h
  • ios学习笔记(二)xcode 4.3.2下实现基本交互
  • ios版本的helloworld
  • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
  • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
  • UITableView一些方法
  • IOS类似iphone通讯录TableView的完整demo【附源码】
  • [iPhone中级]iPhone团购信息客户端的开发 (二)
  • iphone(object-c)内存管理(1)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1