档案日期2011的15

2011年4月11日 - 2011年4月17日

最后更新于 .

这次还是把遇到的几个问题整理一下,希望再遇到的同学能轻松解决。另外最近博客的feeds延迟更新的原因也会一起说明一下。

1.linux下创建线程导致内存泄漏

今天在外网发布了一个server之后,用top发现virt的使用量一直在涨,而且一次涨8m。于是可以断定有内存泄漏了,经过排查,最终确定原因出在多线程的问题上: 代码如下:

pthread_t thread_id;
int ret=pthread_create(&thread_id, NULL, flush_thread_work, (void*)&m_sql_client);
if(ret!=0){
    APPSCORE_ERROR("Thread creation failed:%d",ret);
    return ret;
} 

在flush_thread_work函数内部:

void* flush_thread_work(void* args)
{
    //....do something
    return NULL;
}

代码中启动了一个线程之后,主进程就继续执行,任由新线程自生自灭了(没有调用thread_join),而主进程每隔一段时间就会拉起这样一个线程来做一些数据落地的事情。 这样的写法实际上是会造成内存泄漏的. Linux man page 里有已经说明了这个问题:

When a joinable ...

最后更新于 .

公司还是不推荐用python,只好屈服使用php,不过用python习惯了,真是发现有些地方不适应,今天写了一段代码,语法检查怎么都通不过,特地放在这里,希望有朋友能指点一下。 代码如下:

function get()
{
    $arr = array(
        1,2,3
    );
    return $arr;
}
$y = get()[1];
echo $y;

执行会报如下错误:

Parse error: syntax error, unexpected '['

一开始我还以为又是少写';'之类的问题,仔细检查未果,所以把代码拆成两行,变成:

$y = get();
$y = $y[1];

居然执行成功了! 于是我不解了,为什么连c++都支持的语法,而php里面却不肯支持? c++的代码如下:

vector<int> foo()
{
    vector<int> vec;
    vec.push_back(1 ...

每日归档

上周

2011年度第 13 周

下周

2011年度第 20 周

归档