日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UNIX(多线程):28---双buffer “无锁” 设计

發(fā)布時間:2023/12/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UNIX(多线程):28---双buffer “无锁” 设计 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在linux多線程環(huán)境下對同一變量進(jìn)行讀寫時,經(jīng)常會遇到讀寫的原子性問題,即會出現(xiàn)競爭條件。為了解決多個線程對同一變量訪問時的競爭條件問題,操作系統(tǒng)層面提供了鎖、信號量、條件變量等幾種線程同步機(jī)制。如果對變量的每次訪問都使用上述機(jī)制,由于系統(tǒng)調(diào)用會陷入內(nèi)核空間,需要頻繁的進(jìn)行上下文切換,這就導(dǎo)致了程序的時間開銷比較大。

自然的,我們就想到,在多線程環(huán)境中,在某些情況下是否能減少甚至避免使用系統(tǒng)調(diào)用?答案是肯定的。

如果對多線程下的變量訪問進(jìn)行分析,可以看到,線程對變量的訪問可以分為以下幾類:

  • 一個線程寫,另一個線程讀,簡稱一寫一讀

  • 多個線程寫,一個線程讀,簡稱多寫一讀

  • 一個線程寫,多個線程讀,簡稱一寫多讀。

  • 多個線程寫,多個線程讀,簡稱多寫多讀。

在linux 系統(tǒng)中,多個線程同時讀一個變量是不需要同步的,而多個線程同時寫一個變量或一個線程寫而其他線程讀某個變量,是需要同步的,可以總結(jié)為:”多讀不互斥,而讀寫和多寫互斥“。

由于多個線程對同一變量的讀不需要同步,因而一寫多讀和一寫一讀并無本質(zhì)區(qū)別,進(jìn)而可以把多線程下對變量訪問依據(jù)是否需要同步而合并成如下三類:

  • 一寫多讀

  • 多寫一讀

  • 多寫多讀

解決上面所有的互斥,都可以使用系統(tǒng)調(diào)用。上面已經(jīng)提到,在某些情況下我們是可以避免使用代價高昂的系統(tǒng)調(diào)用的。而“一寫多讀”就是這些特殊情況中的一種。

<

總結(jié)

以上是生活随笔為你收集整理的UNIX(多线程):28---双buffer “无锁” 设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。