如何在 Julia 中使用锁

how to use lock in Julia

我正在和 Julia 一起工作。 IDE是朱诺

如果我没看错的话,@async可以生成任务,就像线程一样。
所以我们可以这样做:

@async begin
   # do something1
end
@async begin
   # do something2
end

现在,我需要锁定一个线程。例如,do something1 是将消息推送到列表,do something2 是从同一列表弹出消息。

就像 Java 中的 synchronized

julia 中的 synchronized 是什么?

要保持​​块互斥:

mutex = RemoteRef()

@async begin
   put!(mutex, true)
   # do something1
   take!(mutex)
end
@async begin
   put!(mutex, true)
   # do something2
   take!(mutex)
end

还有一个@sync宏:

help?> @sync

Wait until all dynamically-enclosed uses of @async, @spawn, @spawnat and @parallel are complete. All exceptions thrown by enclosed async operations are collected and thrown as a CompositeException.

@sync @async begin
   # do something1
end

@sync begin
    # some code    
    @async begin
        # do something2
    end
    @async # do something 3
end