Julia thread中有没有类似于OpenMP中的single命令的东西,它可以确保所有线程在特定代码块之前等待,然后只在一个线程中执行该块?我有一个循环,在一次对所有位置执行更新之前,它会在线程之间分布力计算,如果不终止@threads循环,我找不到任何特性来实现这一点。
发布于 2020-06-25 22:49:14
您可以使用锁:
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。
https://stackoverflow.com/questions/62577111
复制相似问题