求职刷题神器

funit.cn

讨论区 > 技术交流 > 多线程调用单例接口,内部数据如何传出?

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

╭青楼满座。
发布于2020-12-25 14:23:22 69浏览

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

本文首次发布于趣IT ,转载请注明出处,谢谢合作

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

全部评论2
  1. 酷不停 2020-12-25 14:26:10
    最简单的办事是,调用线程传递一个指针进去接收数据,你的接口内部进行动态内存开辟.然后让线程去是释放这部分内存. 在开辟内存的时候,有时候会碰到大小比预计的要小,这个时候你可以把当前开辟的内存直接进行扩容(c++支持这个操作) 或者你构造一个数据链表,每个节点内存储数据和数据大小,每当节点存不下数据了,你在创建一个新的节点并分配内存,依次类推.所分配的内存空间由实际使用的线程释放. 还有其他的方式就不举例了.
    0 举报
  2. 千夜 2020-12-25 14:27:58
    个人感觉设计初衷就不是正确的。
    0 举报

还可以上传7

表情
  • 微信扫码加好友进群