golang " />

扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

golang鎬庝箞鎺у埗骞跺彂鏁伴噺

扬州沐宇科技
2023-10-26 14:39:45
golang

鍦℅o璇█涓紝鍙互浣跨敤goroutine鍜宑hannel鏉ユ帶鍒跺苟鍙戞暟閲忋€?/p>

棣栧厛锛屽彲浠ヤ娇鐢╣oroutine鏉ュ苟鍙戞墽琛屼换鍔°€備緥濡傦紝鏈変竴涓换鍔″垪琛紝姣忎釜浠诲姟鏄竴涓尶鍚嶅嚱鏁帮紝鍙互浣跨敤浠ヤ笅浠g爜骞跺彂鎵ц杩欎簺浠诲姟锛?/p>

tasks := []func(){}
// 濉厖浠诲姟鍒楄〃...

concurrency := 10 // 骞跺彂鏁伴噺
semaphore := make(chan struct{}, concurrency)

var wg sync.WaitGroup
for _, task := range tasks {
    wg.Add(1)
    go func(task func()) {
        defer wg.Done()
        semaphore <- struct{}{} // acquire semaphore
        task()
        <-semaphore // release semaphore
    }(task)
}

wg.Wait()

鍦ㄤ笂闈㈢殑浠g爜涓紝浣跨敤浜嗕竴涓甫缂撳啿鐨刢hannel浣滀负淇″彿閲忥紙semaphore锛夛紝鐢ㄤ簬鎺у埗骞跺彂鏁伴噺銆傞鍏堝垱寤轰竴涓甫缂撳啿澶у皬鐨刢hannel锛屽ぇ灏忎负骞跺彂鏁伴噺锛岀敤浜庨檺鍒跺苟鍙戠殑goroutine鏁伴噺銆傜劧鍚庝娇鐢?code>semaphore <- struct{}{}鏉ヨ幏鍙栦俊鍙烽噺锛岃〃绀哄彲浠ユ墽琛屼换鍔°€備换鍔℃墽琛屽畬鍚庯紝浣跨敤<-semaphore閲婃斁淇″彿閲忥紝琛ㄧず浠诲姟鎵ц瀹屾垚銆?/p>

鍙﹀锛岃繕鍙互浣跨敤sync.WaitGroup鏉ョ瓑寰呮墍鏈変换鍔℃墽琛屽畬鎴愩€傚湪for寰幆涓紝浣跨敤wg.Add(1)鏉ユ坊鍔犱换鍔℃暟閲忥紝鐒跺悗鍦ㄦ瘡涓猤oroutine涓娇鐢?code>wg.Done()琛ㄧず浠诲姟鎵ц瀹屾垚銆傛渶鍚庝娇鐢?code>wg.Wait()绛夊緟鎵€鏈変换鍔″畬鎴愩€?/p>

閫氳繃浠ヤ笂鏂瑰紡锛屽彲浠ユ帶鍒跺苟鍙戞暟閲忥紝鍚屾椂纭繚鎵€鏈変换鍔¢兘琚墽琛屽畬姣曘€?/p>

扫码添加客服微信