golang " />

扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

Golang鐨刢hannel鍜宮utex鍑芥暟鎬庝箞浣跨敤

扬州沐宇科技
2024-01-31 14:40:36
golang

Golang涓殑channel鍜宮utex鏄敤浜庡苟鍙戠紪绋嬬殑涓や釜閲嶈宸ュ叿銆備笅闈㈠垎鍒粙缁嶅畠浠殑浣跨敤鏂规硶銆?/p>

  1. 浣跨敤channel:
  • 鍒涘缓channel: 浣跨敤make鍑芥暟鍒涘缓涓€涓猚hannel銆備緥濡傦細ch := make(chan int)
  • 鍙戦€佹暟鎹埌channel: 浣跨敤<-鎿嶄綔绗﹀皢鏁版嵁鍙戦€佸埌channel銆備緥濡傦細ch <- 10
  • 浠巆hannel鎺ユ敹鏁版嵁: 浣跨敤<-鎿嶄綔绗︿粠channel鎺ユ敹鏁版嵁銆備緥濡傦細x := <-ch
  • 鍏抽棴channel: 浣跨敤close鍑芥暟鍏抽棴channel銆備緥濡傦細close(ch)
  • 闃诲鍜岄潪闃诲鎿嶄綔: 榛樿鎯呭喌涓嬶紝channel鏄樆濉炵殑銆傚彲浠ヤ娇鐢?code>select璇彞鏉ュ疄鐜伴潪闃诲鐨勬搷浣溿€備緥濡傦細
select {
    case x := <-ch:
        // 鎺ユ敹鍒版暟鎹?/span>
    case ch <- 10:
        // 鍙戦€佹暟鎹垚鍔?/span>
    default:
        // 娌℃湁鏁版嵁鍙帴鏀舵垨鍙戦€?/span>
}
  1. 浣跨敤mutex:
  • 鍒涘缓mutex: 浣跨敤sync鍖呬腑鐨?code>Mutex绫诲瀷鏉ュ垱寤簃utex銆備緥濡傦細var mu sync.Mutex
  • 鍔犻攣鍜岃В閿? 浣跨敤Lock鏂规硶鏉ュ姞閿侊紝浣跨敤Unlock鏂规硶鏉ヨВ閿併€備緥濡傦細
mu.Lock()
// 涓寸晫鍖轰唬鐮?/span>
mu.Unlock()
  • 閿佸畾鍜岃В閿佺殑椤哄簭: 鍦ㄤ娇鐢╩utex鏃讹紝搴旇鎸夌収鍔犻攣鍜岃В閿佺殑椤哄簭杩涜鎿嶄綔锛屼互閬垮厤姝婚攣鐨勬儏鍐靛彂鐢熴€?/li>

闇€瑕佹敞鎰忕殑鏄紝channel鍜宮utex鏄敤浜庝笉鍚岀殑骞跺彂鍦烘櫙銆俢hannel涓昏鐢ㄤ簬goroutine涔嬮棿鐨勯€氫俊锛岃€宮utex涓昏鐢ㄤ簬淇濇姢鍏变韩璧勬簮鐨勮闂€傚湪浣跨敤瀹冧滑鏃讹紝闇€瑕佹牴鎹叿浣撶殑闇€姹傞€夋嫨鍚堥€傜殑宸ュ叿銆?/p>

扫码添加客服微信