PowerDi123 2020-12-23 14:55 采纳率: 0%
浏览 34
已结题

多线程调用单例接口,内部数据如何传出?

场景需求:接口类A是单例类,多线程都会调用类的接口处理数据,需要把处理后的数据返回给外部调用者,如果平时按照非单例的做法,我会在A类内预申请内存,把结果存到成员变量的指针中,然后将指针返回给外部调用者使用,这样就得到了处理后的数据。但是在单例类中,每调用一次接口就会把类A的内部成员变量的值改变,此时如果外部调用者没有及时拷贝数据就会覆盖掉原来的数据(多线程时有可能外部调用者在拷贝数据时另一个线程就调用接口,因为接口在完成上一次调用后就释放内部的锁了)。如果需要外部调用者传递一个指针进去,而结果又是变长的数据内存,这种情况怎么预先知道需要多少内存大小呢?

  • 写回答

3条回答 默认 最新

  • 追逐时代的脚步 2020-12-23 15:26
    关注

    最简单的办事是,调用线程传递一个指针进去接收数据,你的接口内部进行动态内存开辟.然后让线程去是释放这部分内存.

    在开辟内存的时候,有时候会碰到大小比预计的要小,这个时候你可以把当前开辟的内存直接进行扩容(c++支持这个操作)

    或者你构造一个数据链表,每个节点内存储数据和数据大小,每当节点存不下数据了,你在创建一个新的节点并分配内存,依次类推.所分配的内存空间由实际使用的线程释放.

    还有其他的方式就不举例了.

    评论

报告相同问题?

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)