【发布时间】:2020-06-25 13:57:29
【问题描述】:
Julia Threads 中是否有类似于 OpenMP 中的 single 命令的东西,可以确保所有线程在特定代码块之前等待,然后仅在一个线程中执行该块?我有一个循环,它在一次对所有位置执行更新之前在线程之间分配力的计算,如果不终止 @threads 循环,我找不到任何功能来实现这一点。
【问题讨论】:
标签: multithreading julia
Julia Threads 中是否有类似于 OpenMP 中的 single 命令的东西,可以确保所有线程在特定代码块之前等待,然后仅在一个线程中执行该块?我有一个循环,它在一次对所有位置执行更新之前在线程之间分配力的计算,如果不终止 @threads 循环,我找不到任何功能来实现这一点。
【问题讨论】:
标签: multithreading julia
你可以使用锁:
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。
【讨论】: