A collection of 3 posts

虚假唤醒(spurious wankeups)

典型案例:在wait端必须用while来等待条件变量而不能用if。 // wait端 pthread_mutex_lock(mtx); while(deque.empty()) pthread_cond_wait(...); deque.pop_front(); pthread_mutex_unlock(mtx) ...

管程

作用 管程保证了同一时间只能有一个进程在管程内活动,使用condition变量让进入管程而无法继续执行的进程阻塞自己。 例子 先来看一段有问题的代码: #define TRUE 1 #define MAX 100 void insert_item(int); int remove_item(); int count ...

Linux性能优化:磁盘I/O优化思路

应用程序优化 追加写代替随机写 借助缓存I/O 在应用程序内部构建缓存,或者外部比如redis C标准提供的fopen、fread等函数,都会利用标准库的缓存,减少磁盘的操作。系统的open、read等系统调用,则只能利用操作系统提供的页缓存和缓冲区等,没有库函数的缓存可以用。 需要频繁读写同一块磁盘是,用mmap代替read/write,减少内存的拷贝次数 需要同步写的场景,尽量将写合并: ...