This commit is contained in:
chai2010 2015-12-24 15:10:32 +08:00
parent 343084fc47
commit d6c1338120
2 changed files with 3 additions and 3 deletions

View File

@ -1,4 +1,4 @@
# Go聖經讀書筆記 # Go語言聖經(中文版)
* [前言](preface.md) * [前言](preface.md)
* [0.1. Go語言起源](ch0/ch0-01.md) * [0.1. Go語言起源](ch0/ch0-01.md)

View File

@ -162,7 +162,7 @@ func (w *writer) Close() error {
} }
``` ```
壓縮完成後Close方法用了defer函數確保函數退齣前調用C.BZ2_bzCompressEnd和C.bz2free釋放相關的C資源。此刻w.stream指針將不在有效我們將它設置爲nil以保證安全然後在每個方法中增加了nil檢測以防止用戶在關閉後依然錯誤使用相關方法。 壓縮完成後Close方法用了defer函數確保函數退齣前調用C.BZ2_bzCompressEnd和C.bz2free釋放相關的C语言运行时資源。此刻w.stream指針將不再有效我們將它設置爲nil以保證安全然後在每個方法中增加了nil檢測以防止用戶在關閉後依然錯誤使用相關方法。
上面的實現中不僅僅寫是非併發安全的甚至併發調用Close和Write方法也可能導致程序的的崩潰。脩複這個問題是練習13.3的內容。 上面的實現中不僅僅寫是非併發安全的甚至併發調用Close和Write方法也可能導致程序的的崩潰。脩複這個問題是練習13.3的內容。
@ -210,5 +210,5 @@ $ ./bzipper < /usr/share/dict/words | bunzip2 | sha256sum
**練習 13.3** 使用sync.Mutex以保證bzip2.writer在多個goroutines中被併發調用是安全的。 **練習 13.3** 使用sync.Mutex以保證bzip2.writer在多個goroutines中被併發調用是安全的。
**練習 13.4** 因爲C庫依賴的限製。 使用os/exec包啟動/bin/bzip2命令作爲一個子進程提供一個純Go的bzip.NewWriter的替代實現譯註雖然是純Go實現但是運行時將依賴/bin/bzip2目録,其他操作繫統可能無法運行)。 **練習 13.4** 因爲C庫依賴的限製。 使用os/exec包啟動/bin/bzip2命令作爲一個子進程提供一個純Go的bzip.NewWriter的替代實現譯註雖然是純Go實現但是運行時將依賴/bin/bzip2命令,其他操作繫統可能無法運行)。