1.通道是什麼
通道,在golang中的形式為型別為chan,是golang中同步的兩個機制之一(另乙個是waitgroup)。
chan的語法形式如下:
channeltype = ( "chan" | "chan" "<-" | "<-" "chan" ) elementtype .
chan的型別可以是chan、chan<-、<-chan任意一種+資料型別(如int或者自定義型別)
2.通道的用法
1)建立chan
建立chan的方法如下:
c := make(chan int, 1)
make後面為緩衝數目,如果不加緩衝,則為無緩衝。
可以建立只有讀或者寫的chan,但這樣的通道沒有什麼用,故在實踐中不常存在。
2)讀寫chan
讀寫chan的符號為<-。讀chan形式為 <-ch, 寫chan形式為 ch<-。
緩衝數意味著讀取或寫入數目夠了的話,將無法進行讀取或寫入。
沒有緩衝的chan將會阻塞讀或者寫,直到有讀或者寫。
3)關閉chan
關閉chan的方法為close()。chan被關閉以後,並不馬上消除空間(因為golang語言的)
4)無緩衝的chan與有緩衝的chan
就像上面的所說的,如果不加緩衝數目,則為無緩衝的chan;否則會生成一定緩衝數目。
沒有緩衝的chan將會阻塞讀或者寫,直到有讀或者寫。
緩衝數目夠了以後,chan也將不會讀和寫。
5)chan與select
chan可以與select一起用,用於併發控制。
select和chan的用法如下:
1)select會遍歷所有case;
2)所有的case都會被求值或計算,求值或計算順序:從左到右,從上到下;
3)如果chan沒有阻塞,則隨機執行乙個case;
4)如果chan被阻塞,則直到乙個chan不被阻塞才會執行。
linux同步機制
一.併發控制 1 自旋鎖 得不到資源,會原地打轉,直到獲得資源為止 定義自旋鎖 spinlock t spin 初始化自旋鎖 spin lock init lock 獲得自旋鎖 spin lock lock 獲得自旋鎖,如果能立即獲得,則馬上返回,否則自旋在那裡,直到該自旋鎖的保持者釋放 spin ...
MySQL 同步機制
innodb沒有使用作業系統同步機制,而是自己封裝,通過spin 自旋 和wait array 等待佇列 的設計提高效能 目前的cpu都支援tas指令。該指令通過讀取乙個位元組或者乙個word,然後和0比較,並且無條件的將其在記憶體中的值設為1,是原子操作。用到swap atomic操作,將記憶體中...
執行緒同步機制
本週主要學習 執行緒同步機制 互斥量 讀寫鎖和條件變數 和簡單程式的實現,對執行緒同步有了進一步認識 內容如下 執行緒的基本概念,相關函式 互斥量 說明 處於標圓形框之上的線段表示相關的執行緒沒有擁有互斥量 處於圓形框中心線之上的線段表示相關的執行緒等待互斥量 處於圓形框中心線之下的線段表示相關的執...