【问题标题】:Synchronization of the standard output in ClojureClojure 中标准输出的同步
【发布时间】:2012-01-15 04:39:39
【问题描述】:

我有一个用 Clojure 编写的多线程应用程序。当多个线程写入 STDOUT 时,使控制台中的文本正确显示存在问题。我怎样才能在 Clojure 中正确地做到这一点,所以线条看起来不会交错?我认为这将涉及某种单独的 IO 代理,但我不确定该怎么做。

【问题讨论】:

    标签: concurrency clojure


    【解决方案1】:

    我认为这将涉及某种单独的 IO 代理

    是的,应该可以。创建代理(def printer (agent nil)) 并使用适当的print 语句调用它,例如(send printer #(println msg))。消息被放置在一个队列中,并一次(异步)执行一条。

    出于记录目的,您还可以查看tools.logging,它在后台使用代理。

    【讨论】:

    • 这行得通,但我必须通过另一个功能代理向代理发送打印作业。由于某些原因,将 println 直接发送给代理无法正常工作。
    • 在 Clojure 网站上的 this article 中,它说:“从另一个单个代理或线程分派给代理的操作将按照它们发送的顺序发生,可能与从其他来源分派给同一代理的操作交错。”这是否意味着“多个线程写入STDOUT”时仍然可能出现问题?
    猜你喜欢
    • 2011-09-01
    • 2011-02-23
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多