- 论坛徽章:
- 0
|
原帖由 wflyfox 于 2009-8-25 15:48 发表 ![]()
写日志的地方比较多,竞争的机会应该蛮大的
弄个thread单独写,semaphore控制生产者消费者,
或者用两个 condition 更加方便。
log_buf开大点就可以。
这样IO的时间几乎不会有影响了
伪代码:
线程:
pthread_mutex_lock(&l);
while(1)
{
if ( !log_buf.empty() )
{
log_buf.write_to_file();
pthread_cond_signal(&full);
}
else
pthread_cond_wait(&empty, &l);
}
pthread_mutex_unlock(&l);
其他thread打印log的函数
void log_printf( const char *buf, ... )
{
...
pthread_mutex_lock(&l);
while( !log_buf.has_enough_buffer() )
pthread_cond_wait(&full, &l);
log_buf.printf( buf, va_args );
pthread_mutex_unlock(&l);
pthread_cond_signal(&empty);
} |
|