CREATE TABLE dcarlo.new_table AS
SELECT ma.name, ma.address, ma.state
FROM main_db AS ma
WHERE ma.dt>=20180301 AND ma.dt<=20180331;
我有一个正在工作的Golang项目,该项目具有遵循上述逻辑的代码块。
我不明白为什么这种逻辑会起作用,因为我曾预计会出现死锁。
答案 0 :(得分:0)
我们将在输入start
到G1时调用正在运行的初始goroutine。
start
}锁定互斥锁并推迟解锁,直到start
返回。start
在新的goroutine(G2)中调用s.processing
start
在新的goroutine(G3)中调用自己start
(G1)解锁互斥锁并返回。除第1步中的锁定外,这些呼叫中没有一个是阻塞呼叫。 同时,在G2中,s.processing
等待start
解锁互斥锁(这很快就会发生,因为所有start
所做的只是在解锁该互斥锁之前启动了几个goroutine。互斥体)。同时,在G3中,上述4个步骤又重新执行了(显然是无限循环)。
该逻辑中没有任何可能导致死锁的点。