0OO

 

2016年6月20日

zoo_函数不返回

   今天在使用zookeeper读取策略文件时遇到一个奇怪的问题:
   在程序启动时进行zookeeper服务器的连接,从指定节点读取策略文件数据都是ok的,然后创建线程,把zookeeper连接句柄传入,在线程中定 时检查该策略文件是否更新,这时候奇怪的问题出现了:调用zoo_exists函数或者zoo_get函数都无法返回,线程被阻塞了。
   经过一系列的猜测和排查(过程就不多说了),原因是:
   zookeeper连接句柄是在daemon函数之前创建的,估计在变成后台进程时,某些东西没有复制过去。

posted @ 2016-06-20 15:34 零圈圈 阅读(36) | 评论 (0)编辑 收藏

2013年7月10日

一个特殊的缓存队列

实现这么一个缓存:
(1)缓存的对象是固定大小
(2)只能从该缓存中分配内存
(3)释放内存要回到缓存中
(4)读写缓存中的数据符合FIFO规则
用途:
(1)接受固定大小的数据块,然后写入缓存中,工作线程从缓存中读取数据块进行处理.

代码:
/**
 * FIFO_Pool.h
 
*/
#ifndef __FIFO_POOL_H
#define __FIFO_POOL_H

#include 
<boost/noncopyable.hpp>
#include 
<boost/pool/object_pool.hpp>
#include 
<boost/thread.hpp>
#include 
<boost/assert.hpp>
#include 
<queue>

namespace ikud {

template 
<typename T>
class FIFO_Pool : boost::noncopyable
{
public:
    FIFO_Pool(
int size);
    
virtual ~FIFO_Pool(void) { /*no-op*/ }

    T
* malloc(void);
    
void free(T* ptr);

    
int read(T** ptr);
    
int write(T* ptr);

private:
    
int                   capacity_;
    
int                   total_;

    boost::object_pool
<T> pool_;
    boost::mutex          pool_mutex_;

    std::queue
<T*>        fifo_;
    boost::mutex          fifo_mutex_;
    boost::condition      fifo_cond_;

};

template 
<typename T>
FIFO_Pool
<T>::FIFO_Pool(int size) : capacity_(size), total_(0)
{
    BOOST_ASSERT(size 
> 0);
}

template 
<typename T>
T
* FIFO_Pool<T>::malloc()
{
    boost::mutex::scoped_lock 
lock(pool_mutex_);

    T
* ptr = NULL;
    
if (total_ < capacity_)
    {
        ptr 
= pool_.malloc();
        
if (ptr != NULL)
            
++ total_;
    }

    
return ptr;
}

template 
<typename T>
void FIFO_Pool<T>::free(T* ptr)
{
    BOOST_ASSERT(pool_.is_from(ptr));

    boost::mutex::scoped_lock 
lock(pool_mutex_);

    pool_.free(ptr);
    
-- total_;
}

template 
<typename T>
int FIFO_Pool<T>::read(T** ptr)
{
    boost::mutex::scoped_lock 
lock(fifo_mutex_);

    
while (fifo_.size() == 0)
    {
        fifo_cond_.wait(
lock);
    }

    
*ptr = fifo_.front();
    fifo_.pop();

    
return 0;
}

template 
<typename T>
int FIFO_Pool<T>::write(T* ptr)
{
    BOOST_ASSERT(pool_.is_from(ptr));

    boost::mutex::scoped_lock 
lock(fifo_mutex_);

    fifo_.push(ptr);
    fifo_cond_.notify_one();

    
return 0;
}


// namespace ikud

#endif // __FIFO_POOL_H

posted @ 2013-07-10 10:20 零圈圈 阅读(107) | 评论 (0)编辑 收藏

2013年7月4日

闭包-初级概念

通俗的说:子函数可以使用父函数中的局部变量,这种行为就叫做闭包!
function a(){
var i=0;
function b(){
alert(++i);
}
return b;
}
var c = a();
c();

posted @ 2013-07-04 14:28 零圈圈 阅读(123) | 评论 (0)编辑 收藏

2013年6月28日

boost singleton

这段时间打算从ACE库转移到boost库上,遇到很多问题.
boost的singleton没有单独的库实现,在1.33.1版本发现了两处:
/usr/include/boost/thread/detail/singleton.hpp
/usr/include/boost/pool/detail/singleton.hpp

thread库里面的实现非常简单,采用函数里面static变量仅被初始化一次的特性,整个实现就两句话:
    static singleton<T> s_oT;
    return(s_oT);
这个就是网上说的2B青年的做法,缺陷啥的不多说了.

pool库的实现就比较复杂,思想是在main函数调用前,就先实例化,并解决多线程的问题,缺陷就是不能lazy了.

posted @ 2013-06-28 11:16 零圈圈 阅读(406) | 评论 (0)编辑 收藏

2009年9月23日

Windows下安装Apache2.2 + PHP5.3 + Mysql5.1

     摘要: (一)
1.下载apache_2.2.13-win32-x86-no_ssl.msi

2.下载php-5.3.0-Win32-VC6-x86.zip
注意VC6版本for Apache, VC9版本for IIS
php-5.3.0-nts-Win32-VC6-x86.msi不能为Apache正常安装(?)

3.下载mysql-5.1.38-win32.msi  阅读全文

posted @ 2009-09-23 17:12 零圈圈 阅读(1766) | 评论 (1)编辑 收藏

2009年9月21日

转贴《Apache 2.2 中文手册》

http://lamp.linux.gov.cn/Apache/ApacheMenu/index.html

posted @ 2009-09-21 14:20 零圈圈 阅读(112) | 评论 (0)编辑 收藏

2009年9月16日

FreeTDS

  FreeTDS is a set of libraries for Unix and Linux that allows your programs to natively talk to Microsoft SQL Server and Sybase databases.
  官方网站: http://www.freetds.org/

posted @ 2009-09-16 16:42 零圈圈 阅读(320) | 评论 (0)编辑 收藏

Python学习(转贴)

     摘要:
Python基本安装
Python文档
常用插件
常用工具
推荐资源  阅读全文

posted @ 2009-09-16 13:56 零圈圈 阅读(845) | 评论 (3)编辑 收藏

2009年9月11日

【转贴】Lua 5.1 参考手册

     摘要: Lua 5.1 参考手册 http://www.codingnow.com/2000/download/lua_manual.html by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes 云风 译 www.codingnow.com Copyright © 2006 L...  阅读全文

posted @ 2009-09-11 11:29 零圈圈 阅读(5113) | 评论 (0)编辑 收藏

开始 Lua

  Lua 是一个扩展式程序设计语言,它被设计成支持通用的过程式编程,并有相关数据描述的设施。
  Lua 也能对面向对象编程,函数式编程,数据驱动式编程提供很好的支持。
  Lua 可以作为一个强大、轻量的脚本语言,供任何需要的程序使用。
  Lua 以一个用 clean C 写成的库形式提供。(所谓 Clean C ,指的 ANSI C 和 C++ 中共通的一个子集)。
  官方网站:http://www.lua.org/
  常用网站:http://lua-users.org/
            http://luaforge.net/  a catalog of Lua projects,e.g. LuaSocketLuaSQL

posted @ 2009-09-11 11:20 零圈圈 阅读(92) | 评论 (0)编辑 收藏

仅列出标题  下一页

导航

随笔分类(15)

随笔档案(15)

最新评论