【问题标题】:Julia @threads single朱莉娅@threads单
【发布时间】:2020-06-25 13:57:29
【问题描述】:

Julia Threads 中是否有类似于 OpenMP 中的 single 命令的东西,可以确保所有线程在特定代码块之前等待,然后仅在一个线程中执行该块?我有一个循环,它在一次对所有位置执行更新之前在线程之间分配力的计算,如果不终止 @threads 循环,我找不到任何功能来实现这一点。

【问题讨论】:

    标签: multithreading julia


    【解决方案1】:

    你可以使用锁:

    function f()
        l = Threads.SpinLock()
        x = 0
        Threads.@threads for i in 1:10^7
            Threads.lock(l)
            x += 1  # this block is executed only in one thread
            Threads.unlock(l)
        end
        return x
    end
    

    请注意,SpinLock 机制专用于非阻塞代码(即仅用于计算,循环中没有 I/O)。如果涉及 I/O,则应使用 ReentrantLock

    【讨论】:

      猜你喜欢
      • 2018-11-27
      • 2014-04-26
      • 1970-01-01
      • 2014-02-04
      • 2014-12-31
      • 2017-01-15
      • 2016-02-18
      • 2021-11-04
      • 1970-01-01
      相关资源
      最近更新 更多