青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

編城浪子的博客
游戲開發、圖形引擎

最近一段時期準備溫習多線程同步相關內容,主要包括關鍵代碼段和各種內核同步對象。先學習最簡單的同步方法--Critical Section。所謂關鍵代碼段,是指給一段代碼加上鎖,要執行這段代碼,必須拿到一把鑰匙,而且這把鑰匙世界上僅存一把,獨一無二。

如下代碼所示:

CRITICAL_SECTION g_cs;

EnterCriticalSection(&g_cs);

//add your critical code here

....

LeaveCriticalSection(&g_cs);

在執行...這段代碼前,必須確保g_cs沒有被其他線程占有,否則線程就在此處掛起。通過這種方式可以保護某個資源,不被多個線程同時訪問。

以下代碼演示了兩個線程在使用Critical Section和不使用的條件下的輸出結果:

// stdafx.h : 標準系統包含文件的包含文件,

// 或是經常使用但不常更改的

// 特定于項目的包含文件

#pragma once

#define WIN32_LEAN_AND_MEAN                                       // Windows 頭中排除極少使用的資料

#include <stdio.h>

#include <tchar.h>

#include <iostream>

 

// critical_section.cpp : 定義控制臺應用程序的入口點。

//

 

#include "stdafx.h"

#include <Windows.h>

 

using namespace std;

 

CRITICAL_SECTION g_cs;

int g_var = 0;

 

DWORD WINAPI ThreadProc(LPVOID lpParam)

{

                    cout << "child thread started!\n";

                    for(int i=0;i<30;i++)

                    {

                                         //EnterCriticalSection(&g_cs);

                                         cout << "The " << "child ";

                                         cout << "thread " << "enter ";

                                         cout << "the CS!" << "\n";

                                         g_var++;

                                         cout << "g_var added by 1: g_var = " << g_var << endl;

                                         cout << "The " << "child " << "thread " << "leave " << "the CS!" << "\n";

                                         //LeaveCriticalSection(&g_cs);

                    }

                    cout << "child thread ended!\n";

                    return 0;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

                    cout << "main thread started!\n";

                    InitializeCriticalSection(&g_cs);

                    DWORD tid;

 

                    HANDLE hThread = CreateThread(0, 0, ThreadProc, 0, 0, &tid);

 

                    for(int i=0;i<30;i++)

                    {

                                         //EnterCriticalSection(&g_cs);

                                         cout << "The " << "main " << "thread ";

                                         cout << "enter " << "the CS!" << "\n";

                                         g_var--;

                                         cout << "g_var minused by 1: g_var = " << g_var << endl;

                                         cout << "The " << "main " << "thread ";

                                         cout << "enter " << "the CS! " << "\n";

                                         //LeaveCriticalSection(&g_cs);

                    }

 

                    WaitForSingleObject(hThread, INFINITE);

 

                    CloseHandle(hThread);

 

                    DeleteCriticalSection(&g_cs);

 

                    cout << "main thread ended!\n";

                    return 0;

}

將如下代碼的注釋去掉即變成了使用Critical Section的實例。

//EnterCriticalSection(&g_cs);

//LeaveCriticalSection(&g_cs);

EnterCriticalSection()的缺點是如果g_cs仍未被其他線程釋放,就一直在此處掛起,如果不想線程掛起,可以用替代函數:

BOOL WINAPI TryEnterCriticalSection(

  __inout  LPCRITICAL_SECTION lpCriticalSection

);

下一章將講述互斥--Mutex的使用。

posted on 2008-10-30 23:10 zengfancy 閱讀(524) 評論(0)  編輯 收藏 引用
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产伦精品一区二区三区| 久久se精品一区精品二区| 欧美久久久久久久久| 久久久高清一区二区三区| 欧美一级淫片播放口| 亚洲免费伊人电影在线观看av| 日韩午夜av在线| 亚洲一区二区精品| 香蕉尹人综合在线观看| 久久疯狂做爰流白浆xx| 久久精品一本久久99精品| 久久视频一区| 欧美精品成人| 国产精品久久婷婷六月丁香| 国产日韩亚洲欧美| 亚洲国产精品久久久久秋霞影院 | 欧美激情二区三区| 亚洲激情欧美激情| 99伊人成综合| 久久精品二区亚洲w码| 免费欧美电影| 欧美人成免费网站| 国产欧美日韩在线视频| 91久久国产综合久久| 亚洲综合视频一区| 免费久久精品视频| 日韩午夜在线观看视频| 欧美一区二区黄色| 欧美激情第五页| 欧美高清成人| 最新国产精品拍自在线播放| 亚洲日韩视频| 欧美一区二区视频免费观看| 欧美国产日韩二区| 国产亚洲精久久久久久| 亚洲全黄一级网站| 久久精品免费播放| 99热这里只有精品8| 久久久99精品免费观看不卡| 欧美日韩一区二区精品| 亚洲国产va精品久久久不卡综合| 亚洲欧美日韩综合aⅴ视频| 噜噜噜噜噜久久久久久91| 在线综合亚洲欧美在线视频| 免费视频久久| 国产主播一区二区三区| 亚洲一级片在线看| 亚洲精品一区久久久久久| 久热精品视频| 精品成人国产| 久久精品72免费观看| 国产精品99久久久久久久久| 欧美日本精品一区二区三区| 亚洲国产精品精华液2区45| 久久全国免费视频| 欧美一级一区| 狠狠色狠狠色综合人人| 久久久激情视频| 欧美一区91| 国产一区二区三区久久久| 欧美与黑人午夜性猛交久久久| 99精品国产在热久久| 欧美交受高潮1| 亚洲欧洲日韩在线| 亚洲国产精品va在线看黑人动漫| 久久综合九色99| 亚洲国产mv| 亚洲精品在线观看免费| 欧美连裤袜在线视频| 99国产精品久久| 亚洲美女在线视频| 欧美三级中文字幕在线观看| 亚洲一区二区黄| 亚洲免费网址| 在线免费观看日韩欧美| 欧美二区在线观看| 欧美高清在线一区二区| 一区二区三区四区五区视频| 99re热这里只有精品视频| 国产精品视频久久| 久久久另类综合| 欧美国产视频一区二区| 亚洲一二三四区| 欧美在线视频一区二区| 最新精品在线| 亚洲一区二区三区精品在线观看 | 欧美中文字幕在线观看| 久久精品一二三| 日韩亚洲视频在线| 亚洲图片欧洲图片日韩av| 国产一区二区av| 亚洲大片av| 国产伦精品一区二区三区视频孕妇| 久久久www成人免费无遮挡大片| 老巨人导航500精品| 亚洲一区成人| 久久久综合激的五月天| 日韩视频免费观看高清在线视频| 一本一本久久| 激情五月婷婷综合| 日韩一级不卡| 在线观看视频日韩| 亚洲一区二区三区免费视频| 精品成人在线视频| 妖精成人www高清在线观看| 国产综合欧美| aaa亚洲精品一二三区| 伊人久久大香线| 亚洲最新在线视频| 亚洲国产日韩综合一区| 亚洲欧美国产高清| 日韩一级精品| 久久综合九色欧美综合狠狠| 午夜一区二区三区在线观看| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美一区二区福利在线| 欧美日韩国产电影| 欧美激情亚洲国产| 极品av少妇一区二区| 亚洲男人的天堂在线观看| 亚洲精品一区二区三区不| 欧美一区二区高清在线观看| 亚洲欧美偷拍卡通变态| 欧美激情一区二区三区| 久久视频一区| 国模精品一区二区三区色天香| 亚洲视屏在线播放| 一本色道久久综合亚洲精品不| 久久乐国产精品| 久久亚洲精品欧美| 国产午夜亚洲精品理论片色戒| 日韩视频二区| 一本色道久久加勒比88综合| 欧美成人一区二区三区在线观看 | 久久国产精品一区二区三区四区 | 国产精品视频一区二区高潮| 亚洲欧洲精品一区二区三区不卡 | 久久综合久久综合久久| 久久久久久久久久看片| 国产精品一国产精品k频道56| 国产尤物精品| 亚洲永久视频| 亚洲视频精选在线| 欧美日韩a区| 99国产精品久久久久久久成人热| 一本大道久久a久久综合婷婷| 欧美精品在线观看播放| 亚洲精品自在久久| 亚洲一二三四久久| 国产精品夜夜嗨| 久久av一区二区三区| 裸体一区二区三区| 亚洲第一毛片| 欧美日本韩国在线| 亚洲欧美国产三级| 久久在线免费观看视频| 亚洲欧洲精品一区二区三区不卡| 欧美日韩国产一区精品一区| 亚洲一区欧美一区| 免播放器亚洲一区| 日韩午夜av在线| 国产精品青草综合久久久久99| 亚洲一本大道在线| 久久久久国产成人精品亚洲午夜| 黄色一区二区在线观看| 美日韩精品免费| 亚洲最新合集| 美女视频网站黄色亚洲| 亚洲精品1区2区| 国产精品国产福利国产秒拍| 欧美一区二区三区的| 欧美国产视频在线观看| 亚洲一区视频| 亚洲国产专区校园欧美| 国产精品久久久久久久久免费樱桃 | 亚洲国产视频一区二区| 亚洲一区三区视频在线观看| 精品999网站| 国产精品黄色| 欧美h视频在线| 亚洲欧美日韩天堂| 亚洲经典自拍| 久久久久一区二区三区| 亚洲亚洲精品三区日韩精品在线视频| 国产午夜精品一区二区三区欧美| 欧美精品国产精品日韩精品| 欧美一区二区精品| 99国产精品久久久| 亚洲国产高清一区二区三区| 久久久久久久久综合| 亚洲一级免费视频| 日韩视频永久免费| 狠狠色狠狠色综合日日五| 欧美视频在线观看一区| 久久中文欧美| 欧美一区二区三区免费观看视频| 99精品热6080yy久久| 欧美激情一区二区三级高清视频| 久久精品国产999大香线蕉| 亚洲影视综合|