日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C++多線程的幾點(diǎn)

 孤步 2012-08-13
C++多線程的幾點(diǎn)

關(guān)于多線程:

1. C++中,創(chuàng)建線程有SDK的CreateThread,傳遞一個(gè)線程函數(shù),它的定義為
    DWORD WINAPI funcproc(LPVOID lpParameter)。但我們盡量避免使用單純的C++庫,在VC++中    MFC封裝了CWinThread,我們既可以從CWinThread派生 出自己的線程類,也可以直接使用CWinThread作為宿主類,傳遞線程函數(shù)。線程函數(shù)的定義為UINT ThreadProc(LPVOID lpParam),我們使用AfxBeginThread來創(chuàng)建一個(gè)線程,該線程一旦啟動(dòng)后,將直接進(jìn)入ThreadProc,而且從該 ThreadProc返回時(shí),線程也將結(jié)束。我們?cè)O(shè)置dwCreateFlags參數(shù)的值為CREATE_SUSPENDED來使線程一創(chuàng)建后,直接掛 起。我們也可以顯式調(diào)用AfxEndThread來結(jié)束線程。
  1. 在多線程開發(fā)中,最主要的麻煩是同步和資源沖突問題,我們考慮以下環(huán)境,有線程讀取一個(gè)變量,而另一個(gè)線程正在同步刷新該變量,這時(shí) 就發(fā)生同步問題。面對(duì)一個(gè)資源,我們有時(shí)需要限制同時(shí)訪問該資源的個(gè)數(shù)。我們有時(shí)只能允許只有一個(gè)線程訪問一個(gè)資源,例如打印機(jī)。我們還有些時(shí)候需要讓線 程等待一個(gè)信號(hào)的出現(xiàn),例如串口采集后臺(tái)處理線程。
    1. CEvent:表示一個(gè)“事件”——一個(gè)允許一個(gè)線程通知另一個(gè)線程事件已經(jīng)發(fā)生的同步對(duì)象。當(dāng)應(yīng)用程序必須等到發(fā)生某事才能訪問資源的時(shí)候,我們應(yīng)該使用這個(gè)類。
      在一個(gè)處理線程中,用CEvent::SetEvent,然后其他類使用CSingleLock::Lock等待。
    2. CSemaphore:表示一個(gè)“信號(hào)燈”——一個(gè)允許一個(gè)或多個(gè)進(jìn)程中的有限多個(gè)線程訪問一個(gè)資源的同步對(duì)象。當(dāng)限制同一應(yīng)用程序內(nèi)(1到n個(gè))線程可以同時(shí)訪問此資源時(shí),我們應(yīng)該使用這個(gè)類。
      CSemaphore semaphore(3,3,”semaphore”);//參數(shù)1:初始資源數(shù);2:最大資源數(shù);3:信號(hào)量的名稱.
      semaphore.Lock();
      semaphore.Unlock();
      若已經(jīng)達(dá)到最大訪問客戶數(shù),則下一個(gè)請(qǐng)求鎖定客戶將會(huì)阻塞等待。
    3. CMutex:表示一個(gè)“互斥體”——一個(gè)允許一個(gè)線程以互相排斥的方式訪問一個(gè)資源的同步對(duì)象。當(dāng)可以有一個(gè)以上的應(yīng)用程序使用此資源,使用這個(gè)類。
      CMutex mutex(FALSE,”MUTEX”);//第一個(gè)參數(shù):互斥量初始是鎖定還是未鎖定;第二個(gè)參數(shù):互斥量名稱,用于標(biāo)識(shí).
      mutex.Lock();
      mutex.Unlock();
    4. CCriticalSection:表示一個(gè)“臨界區(qū)”——一個(gè)允許一個(gè)線程同時(shí)訪問一個(gè)資源或代碼段的同步對(duì)象。相對(duì)與CMutex,則使用這個(gè)類,與上面的區(qū)別唯一在于上面可以允許另一個(gè)進(jìn)程使用該資源,兩者相同在于進(jìn)程內(nèi)線程互斥。
    5. CMultiLock:表示多線程程序中用于控制對(duì)多個(gè)資源的訪問的訪問控制機(jī)制。若其中有一個(gè)資源沒釋放,則等待。
    6. CSingleLock:表示多線程程序中用于控制對(duì)一個(gè)資源的訪問的訪問控制機(jī)制。CSingleLock singleLock(&m_CritSection);
      singleLock.Lock();
      singleLock.Unlock();
      m_CritSection為同步類,根據(jù)不同的需要采用不同的同步類,如CEvent、CMutex、CCriticalSection。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多