如何在 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
我正在和 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