在go裡面,併發程式依靠的是goroutine和channel。
goroutine可以理解為執行緒,當對乙個函式呼叫go,啟動乙個goroutine的時候,就相當於起來乙個執行緒來執行這個函式。比如:
funcgetinfo(name
string,age
int)
funcmain()
輸出:start
name: li,age: 12
name: sun,age: 45
當起乙個goroutine後,主線程不知道這個goroutine什麼時候結束,所以在上面的main函式裡設了乙個sleep來等待兩個goroutine處理完,由此可見,當goroutine結束後必須要通過某種方式來告知主線程自己已經結束。
在go裡面則是通過channel來傳遞這種訊息,如:
varcchan
int
funcfuncgetinfo(name
string,age
int)
main()
channel只能通過make來建立,指定channel的型別(如int)可以說明這個管道能傳什麼型別的資料。往channel中插入資料用c<-0,取出則是用<-c,取出兩次是為了告知主線程兩個子執行緒都執行完畢。
參考:
Boost之多執行緒
c 標準庫沒有涉及執行緒,在c 中,雖然不可能寫出標準相容的多執行緒程式,程式設計師可以使用特定作業系統提供的執行緒庫來寫出多執行緒程式來。可是,這至 少導致兩個突出的問題 作業系統普遍提供的是c庫,在c 中使用要更小心,每個作業系統都有自己的一套支援多執行緒的庫 另外,不標準,不可移植。boost...
linux之多執行緒
linux系統下的多執行緒遵循posix執行緒介面,稱為pthread 標頭檔案 include 原型 int pthread create pthread t tidp,const pthread attr t attr,void start rtn void void arg 返回值 若執行緒建...
c 之多執行緒
1.對多執行緒的呼叫用到頭檔案 1.1中的操縱函式 pthread create pthread t tidp,constpthread attr t attr,void start rtn void void arg 第乙個引數為指向執行緒 識別符號的 指標。第二個引數用來設定執行緒屬性。第三個引...