黑名_單 2019-05-15 15:38 采纳率: 100%
浏览 382
已采纳

来个阻塞队列的代码实现,谢谢

请教一下各位,我想实现阻塞队列的功能,比如所有个队列对象gQueue,它有两个函数qin(),qout(),
我有多个线程需要写一个文件,这时候需要给这几个线程写文件的地方排队,大概代码如下

//线程内部

gQueue.qIn();

writeFile();

gQueue.qOut();

//线程内部

一个线程writeFile的时候,另外的线程再qin里面按先进先出顺序排队,当这个线程调用qout的时候队列里面按先进先出顺序使得最先进去的下一个线程能操作文件,
我自己写过一些方式,但是多次运行以后可能会有排队错误,麻烦各位高手不吝赐教,谢谢,顺便说一下简单使用互斥量是不能实现的,那家伙只再两个线程间有用

  • 写回答

1条回答 默认 最新

  • wallesyoyo 2019-05-17 13:56
    关注

    没看明白你想表达的意思。

    你是不是有一堆线程想要往同一个文件里面写东西?如果单单是这样的话。你完全可以维护一个任务集合的队列。

    所有需要写文件的线程,往队列里面添加写文件的任务,然后单独再开一个线程,这个线程只负责循环从队列里面取任务执行。

    其实这个结构就是只有单个线程的线程池额。如果你对任务的执行先后有顺序要求,可以使用优先队列。

    另外需要注意的是,STL里面的队列容器的push和pop操作都不是线程安全的,所以在操作容器的地方需要加锁。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率