linu和windows多執行緒的異同

2022-02-22 05:34:25 字數 1075 閱讀 8162

1樓:千鋒教育

linux多執行緒及執行緒同步和windows的多執行緒之間的異同

並不是所有的程式都必須採用多執行緒,有時候採用多執行緒效能還不如單執行緒。採用多執行緒的好處如下:

(1)多執行緒之間採用相同的地址空間,共享大部分的資料,和多程序相比,代價比較節儉,而啟動新的程序必須分配給它獨立的地址空間,需要資料表來維護**段,資料段和堆疊段等等。

(2)對不同程序來說,它們具有獨立的資料空間,要進行資料的傳遞只能通過通訊的方式進行,費時而且不方便。多執行緒之間可以直接共享資料,比如共享全域性變數。共享全域性變數要注意變數的同步性,不然容易引起災難性的後果。

(3)在多cpu的情況下,不同的執行緒可以執行在不同的cpu下,這樣就完全並行了。

在這種情況下,採用多執行緒比較理想。比如要做一個任務分2個步驟,為提高工作效率可以多執行緒技術開闢2個執行緒,第一個執行緒做第一步,第2個執行緒做第2步。這個時候要注意同步。

因為只有第一步做完才能做第2步的工作。這時,可以採用同步技術進行執行緒之間的通訊。

針對這種情況,講解一下多執行緒之間的通訊,在windows平臺下,多執行緒之間通訊採用的方法主要有:

(1)共享全域性變數,比如上面的問題,第一步要向第2步傳遞收據,可以共享全域性變數,讓兩個執行緒之間傳遞資料,這時主要考慮的問題就是變數的同步,因為後面的執行緒在對資料進行操作的時候,第一個執行緒又改變了資料的內容,不同步保護,後果很嚴重(即讀回髒資料)。這種情況下,容易想到的同步方法是設定一個bool flag,比如在第2個執行緒還沒有用完資料前,第一個執行緒不能寫入。有時在2個執行緒所需的時間不相同的時候,怎樣達到最大效率的同步,就比較麻煩。

這時可以多開幾個緩衝區進行操作。如果是2個執行緒一直在跑,由於時間不一致,緩衝區遲早會溢位。在這種情況下要考慮:

是不讓資料寫入還是讓資料覆蓋掉舊的資料。這時候要具體問題具體分析。即用bool變數控制同步,linux 和windows是一樣的。

2樓:多慮了圖

linux的執行緒是共享記憶體空間的多個程序,windows是一個程序。windows執行緒之間相互作用比linux強

**linux 多執行緒程式設計和 windows 多執行緒程式設計的異同

c多執行緒建立的幾種方式,c多執行緒同時執行兩個函式該怎樣程式設計啊

直接使用作業系統api 使用標準c 執行緒支援庫 可跨平臺 使用第三方執行緒庫 如何在windows系統上用c 建立多執行緒 waitformultipleobject sizeof hthreads hthreads,false,infinite,false 執行緒資源釋放 closehandle...

程式設計裡的多執行緒和cpu的執行緒有關係嗎

只看了一篇文章是這麼比喻的 沒有執行緒的多核cpu 就像是 多個人在一個桌子上吃飯,有時候出現爭搶的情況 會降低效率。有多執行緒的多核cpu 就像是多個人在多個桌子上吃飯,都吃自己桌子上的菜 效率就很高很多。一般情況下每個核心都有一個執行緒,幾核心就有幾執行緒,但是intel發明了超執行緒技術,可以...

多核 多cpu 多程序 多執行緒的關係

程式單一化時可以這麼理解,但現在一般是基於作業系統的,所以作業系統會按其設計優化規則去盡力合理排程和分配硬體資源,但是碰到頻繁的跳轉其效率仍然會降低,這裡cpu的快取越大就越能掩蓋這些非優設計。而程式本身如果按多核模式設計的則效率更高,所以表現出來老的程式在新硬體上執行仍然有提高,而針對多核優化設計...