日常 Go語言聖經 競爭條件習題

2021-09-07 18:19:18 字數 1260 閱讀 9577

package main

import(

"fmt"

"sync"

)var balance int

func deposit(amount int)

func balance() int

/*問題:

1.在alice執行期間 balance = balance + amount 這一步運算可能會被bob中間擠占

2.當執行到balance + amount的時候,bob的正好趕到,然後繼續執行blance=

3.此時bob的增加的資料會丟失

*/func main()()

wg.add(1)

// bob:

go func()()

wg.wait()

res:=balance()

fmt.println(res)

}

練習 9.1: 給gopl.io/ch9/bank1程式新增乙個withdraw(amount int)取款函式。其返回結果應該要表明事務是成功了還是因為沒有足夠資金失敗了。這條訊息會被傳送給monitor的goroutine,且訊息需要包含取款的額度和乙個新的channel,這個新channel會被monitor goroutine來把boolean結果發回給withdraw。

package main

import(

"fmt"

"sync"

)var balance int

var deposits = make(chan int) //存款用channel

var balances = make(chan int) //接收餘額用channel

func deposit(amount int)

func balance() int

func main()()

wg.add(1)

go func()()

wg.add(1)

go func()

}()wg.wait()

b:=balance()

fmt.println(b)}/*

解決:1.總餘額限定在乙個goroutine中,通過channel通訊

2.channel是會阻塞同一時間的多個goroutine的

*/func teller()

}}//取款用函式

func withdraw(amount int)bool

return true

}

日常 Go語言聖經 競爭條件習題

package main import fmt sync var balance int func deposit amount int func balance int 問題 1.在alice執行期間 balance balance amount 這一步運算可能會被bob中間擠占 2.當執行到ba...

日常 Go語言聖經 競爭條件習題

package main import fmt sync var balance int func deposit amount int func balance int 問題 1.在alice執行期間 balance balance amount 這一步運算可能會被bob中間擠占 2.當執行到ba...

日常 Go語言聖經 Map習題

練習 4.8 修改charcount程式,使用unicode.isletter等相關的函式,統計字母 數字等unicode中不同的字元類別。練習 4.9 編寫乙個程式wordfreq程式,報告輸入文字中每個單詞出現的頻率。在第一次呼叫scan前先呼叫input.split bufio.scanwor...