1 回答

TA貢獻1878條經(jīng)驗 獲得超4個贊
您用于Client.GetOrCreateAlbumByName()獲取或創(chuàng)建相冊。此方法對于并發(fā)使用是安全的,它在內(nèi)部使用互斥鎖來序列化調(diào)用,從而確保不會創(chuàng)建重復項。
但是,您在這里創(chuàng)建和使用多個客戶端,這意味著對所有客戶端的并發(fā)調(diào)用不會被序列化,只會對單個客戶端的并發(fā)調(diào)用。
所以解決方案要么使用單個客戶端,然后所有調(diào)用都將被序列化,或者如果這不可能,您必須序列化對所有客戶端的調(diào)用,例如使用單個互斥鎖或其他方式。
如何使用互斥鎖序列化對所有客戶端的調(diào)用的示例:
var mu sync.Mutex
func GetOrCreateAlbumByName(c *gphotos.Client, name string) (*photoslibrary.Album, error) {
mu.Lock()
defer mu.Unlock()
return c.GetOrCreateAlbumByName(name)
}
無論您在哪里使用client.GetOrCreateAlbumByName(name),都將其替換為調(diào)用:
GetOrCreateAlbumByName(client, name)
- 1 回答
- 0 關(guān)注
- 123 瀏覽
添加回答
舉報