黑名_單 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操作都不是线程安全的,所以在操作容器的地方需要加锁。

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

报告相同问题?

悬赏问题

  • ¥100 高价邀请复制 域天d8联网狗
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?