Tour

Action speaks louder than words ...

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  多线程

摘要:编写同步队列时,有用到条件变量,对操作队列的线程进行同步。当队列为空时,允许get线程挂起,直到add线程向队列添加元素并通过唤醒条件变量,get线程继续向下运行。条件变量在多线程程序中用来实现“等待->唤醒”逻辑常用的方法。条件变量要和互斥量相联结,以避免出现条件竞争:一个线程预备等待一个条件... 阅读全文
posted @ 2014-12-18 01:15 Tourun 阅读(2539) 评论(2) 推荐(3)

摘要:多线程程序中,我们经常会遇到这种情况,主线程启动时加载一些参数到内存中的某个对象或者数据结构中,将这个对象或数据结构作为参数传入各个子线程中,为了避免对象的复制与拷贝,往往传入的是指针,子线程启动,进行业务逻辑处理,需要根据key值获取hashtable中的value,value = m_pPa... 阅读全文
posted @ 2014-11-24 15:13 Tourun 阅读(989) 评论(0) 推荐(0)

摘要:上篇文章尝试着使用head lock和tail lock分别在Get和Add元素时,对队列进行上锁,这样就避免了每次操作都锁住整个队列,缩小了锁的粒度。这里还有个问题,队列中持有的T对象指针,均是由调用者动态分配和释放的,如果调用量特别大,new/delete操作频繁,同样会导致性能下降,可能使... 阅读全文
posted @ 2014-11-23 23:11 Tourun 阅读(4196) 评论(0) 推荐(1)

摘要:我们知道,对于一个队列而言,最主要的两个操作是添加元素(Add)和获取/删除元素(Get),之前文章中实现了一个linux下通用的阻塞队列BlockQueue,通过代码可以看出,为了保证在多线程环境下安全正确的运行,BlockQueue定义中的几个关键函数都进行了加锁保护,而锁住的对象是整个队列... 阅读全文
posted @ 2014-11-19 16:18 Tourun 阅读(1193) 评论(1) 推荐(0)

摘要:生产者消费者问题是一个多线程同步问题的经典案例,大多数多线程编程问题都是以生产者-消费者模式为基础,扩展衍生来的。在生产者消费者模式中,缓冲区起到了连接两个模块的作用:生产者把数据放入缓冲区,而消费者从缓冲区取出数据,如下图所示: 可以看出Buffer缓冲区作为一个中介,将生产者和消费者分... 阅读全文
posted @ 2014-11-18 16:21 Tourun 阅读(2421) 评论(0) 推荐(0)