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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

扩展内容(线程的同步方法)

發(fā)布時間:2024/2/28 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 扩展内容(线程的同步方法) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、 臨界區(qū)(CCriticalSection)

當多個線程訪問一個獨占性共享資源時,可以使用臨界區(qū)對象。擁有臨界區(qū)的線程可以訪問被保護起來的資源或代碼段,其他線程若想訪問,則被掛起,直到擁有臨界區(qū)的線程放棄臨界區(qū)為止。

2、事件(CEvent)

事件機制,分為自動重置事件對象和人工重置事件對象;

  • 自動重置事件對象,一旦被觸發(fā)(有信號,setEvent(h)),那么等待的所有線程中將只有一個線程能獲得事件對象的句柄h,并同時自動的將此事件對象設置為無信號的,只有當這個線程執(zhí)行完了,并且調(diào)用了setEvent(h)來觸發(fā)這個事件對象,那么其他的線程才獲得,總之每次只能有一個等待的線程獲得事件對象,因為只要其中一個線程獲得了此事件對象h,那么就會自動的將h設置成為無信號的狀態(tài),直到調(diào)用setEvent(h)來觸發(fā)這個事件對象;它能夠確保一個線程獨占對一個資源的訪問。
  • 人工重置事件對象,一旦被觸發(fā)(有信號,setEvent(h)),那么等待此事件對象的所有線程都將變成可調(diào)度的狀態(tài),CUP會隨機的分配CPU時間給等待的所有線程,這些線程將同步的、隨機的獲取CPU的時間,來執(zhí)行線程中的代碼。

3、互斥量(CMutex)

互斥量對象(包含一個線程ID,能夠知道是哪個線程訪問了他)能夠確保一個線程獨占對一個資源的訪問。

1)如果線程ID為0(無效線程ID),那么互斥量將不為任何線程所占有,他處于觸發(fā)狀態(tài);

2)如果線程ID為非零,那么有一個線程已經(jīng)占用了這個互斥量,它處于未觸發(fā)的狀態(tài);

假設線程視圖等待一個未觸發(fā)的互斥量對象,在這種情況下,線程通常會進入等待狀態(tài),但是,系統(tǒng)會檢查想要獲得互斥量的線程的線程ID與互斥量對象內(nèi)部記錄的線程ID是否相同,如果相同,那么系統(tǒng)會讓線程保持可調(diào)度狀態(tài),即使該互斥量尚未觸發(fā)。

互斥量與臨界區(qū)的行為完全相同,但是區(qū)別如下:互斥量是內(nèi)核對象,臨界區(qū)是用戶模式下的同步對象,執(zhí)行速度快于內(nèi)核對象

4、信號量(CSemphore)

信號量與其他所有內(nèi)核對象相同,但是另外又包含了兩個32位的值:
一個是最大資源計數(shù),一個是當前資源計數(shù)。

  • 最大資源計數(shù)表示信號量可以控制的最大資源數(shù)量(這個是在創(chuàng)建信號量的時候就已經(jīng)設定好了);
  • 當前資源計數(shù)表示信號量當前可用資源數(shù)量;
  • 信號量的規(guī)則如下:

  • 如果當前資源計數(shù)大于0,那么信號量處于觸發(fā)狀態(tài);
  • 如果當前資源計數(shù)等于0,那么信號處于未觸發(fā)狀態(tài);
  • 系統(tǒng)絕對不會讓當前資源計數(shù)變?yōu)樨摂?shù);
  • 當前資源計數(shù)絕對不會大于最大資源計數(shù)。
  • 總結(jié)

    以上是生活随笔為你收集整理的扩展内容(线程的同步方法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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