Qore stream documentation (https://qoretechnologies.com/manual/qorus/latest/qore/lang/html/class_qore_1_1_output_stream.html)指出,除非对象已经创建,否则不能从其他线程调用流实例(我确实看到了硬编码的检查片段if (tid != gettid()) then raise exception。这似乎是一个巨大的限制,因为即使是锁定也无济于事。
当我需要使用来自多个线程的流对象时,应该如何解决?
我可以想象额外的“流”线程和一个队列作为唯一的解决方案。
发布于 2018-02-12 14:12:30
由于性能原因,迭代器和流都被设计为仅限于单线程使用,也因为在完成Qore流的设计和实现时,不能使用内置的流对象来识别使用来自多个线程的流的实际用例。
您可以实现自己的支持多线程使用的流,因为抽象基类InputStream和OutputStream的最小内部C++实现不包含对多线程使用的任何限制。
如果你真的需要内建流中的多线程支持,那么可以扩展Qore,例如,允许在子类中实现适当的锁定。
https://stackoverflow.com/questions/48730829
复制相似问题