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

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

最近一段時期準備溫習多線程同步相關內容,主要包括關鍵代碼段和各種內核同步對象。先學習最簡單的同步方法--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 閱讀(525) 評論(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>
            亚洲麻豆av| 国产精品黄色| 日韩视频在线观看免费| 亚洲欧洲一区二区在线播放| 亚洲二区在线| 日韩视频在线一区二区三区| 99热免费精品| 亚洲欧美另类中文字幕| 久久久亚洲综合| 欧美日韩国产一级| 国产视频亚洲精品| 91久久精品国产91久久| 国产精品久久福利| 欧美色图五月天| 久久综合九色综合欧美就去吻| 亚洲国产综合91精品麻豆| 六月天综合网| 久久久久久亚洲精品杨幂换脸| 亚洲一区二区三区四区中文| 亚洲午夜精品久久久久久app| 国产日韩精品一区| 99精品国产福利在线观看免费| 国产精品视频不卡| 在线日韩视频| 欧美国产另类| 亚洲国产乱码最新视频| 9色国产精品| 一本久久知道综合久久| 免费精品视频| 欧美视频在线观看一区| 国产主播一区二区三区| 激情五月***国产精品| 亚洲伦理在线观看| 久久久久久电影| 99热这里只有成人精品国产| 日韩一区二区精品葵司在线| 午夜精品久久久久久久久| 欧美成人免费一级人片100| 亚洲影视综合| 欧美日韩免费在线| 最新精品在线| 理论片一区二区在线| 亚洲欧美日韩另类| 国产精品福利久久久| 一区二区三区欧美成人| 亚洲国产高清自拍| 久久综合狠狠| 在线不卡免费欧美| 久久精品人人做人人综合| 亚洲午夜精品视频| 国产精品国产三级国产普通话99| 99热在这里有精品免费| 亚洲国产视频一区| 免费观看成人鲁鲁鲁鲁鲁视频| 狠狠色狠狠色综合人人| 国产精品看片你懂得| 一本一本大道香蕉久在线精品| 欧美国产激情| 欧美精品二区| 亚洲视频精选在线| 一区二区三区精品在线| 国产精品扒开腿做爽爽爽软件| 亚洲天堂偷拍| 亚洲综合999| 国产女人18毛片水18精品| 午夜视频久久久久久| 午夜亚洲一区| 国自产拍偷拍福利精品免费一| 久久亚洲综合| 欧美成人精品1314www| 亚洲国产经典视频| 亚洲黄色成人| 国产精品久久久久久久久久久久| 亚洲在线视频网站| 性欧美在线看片a免费观看| 国产一区二区精品久久99| 狂野欧美一区| 欧美日韩国产成人| 欧美亚洲午夜视频在线观看| 欧美在线网址| 亚洲精品一区二区网址| 亚洲图片自拍偷拍| 国产综合色精品一区二区三区| 欧美成人高清| 国产精品成av人在线视午夜片| 久久精品亚洲热| 欧美韩日高清| 久久精品国产一区二区三区| 麻豆久久精品| 欧美一区二区视频免费观看| 葵司免费一区二区三区四区五区| 久久在线精品| 99天天综合性| 性高湖久久久久久久久| 亚洲日本欧美在线| 午夜日韩电影| 亚洲午夜精品网| 久久综合九色综合欧美就去吻| 亚洲自拍偷拍麻豆| 麻豆精品91| 欧美影院在线| 欧美日韩一卡二卡| 欧美丰满高潮xxxx喷水动漫| 国产精品丝袜久久久久久app| 欧美高清在线精品一区| 国产日韩精品一区二区| 亚洲精品日韩精品| 亚洲国产成人高清精品| 亚洲影视中文字幕| 一区二区三区视频在线| 久久一区二区三区超碰国产精品| 午夜天堂精品久久久久| 欧美精品一区二区三区在线播放| 久久婷婷国产综合精品青草| 国产精品亚洲综合一区在线观看| 亚洲黄色一区| 在线日韩电影| 久久全球大尺度高清视频| 久久国产视频网| 国产精品网站在线| 亚洲欧美文学| 欧美精品七区| 亚洲激情啪啪| 日韩一区二区免费高清| 欧美91大片| 欧美激情在线免费观看| 1024成人| 欧美阿v一级看视频| 欧美国产日韩精品免费观看| 狠狠爱www人成狠狠爱综合网| 久久爱另类一区二区小说| 欧美主播一区二区三区美女 久久精品人 | 国产精品男女猛烈高潮激情| 亚洲精品韩国| a4yy欧美一区二区三区| 欧美久久一区| 亚洲巨乳在线| 亚洲一区在线直播| 国产精品你懂的在线欣赏| 亚洲四色影视在线观看| 午夜精品久久久久影视| 国产免费成人| 久久精选视频| 亚洲国产精品一区二区第四页av| 亚洲国产中文字幕在线观看| 欧美国产日韩精品| 亚洲视频1区2区| 久久国产毛片| 亚洲人成网站色ww在线| 欧美喷水视频| 一本久道久久综合狠狠爱| 国产精品成人aaaaa网站| 亚洲欧美日韩国产成人精品影院| 久久久久一区二区三区| 亚洲第一区在线| 欧美日韩你懂的| 欧美一级播放| 亚洲欧洲日产国产网站| 亚洲欧美日韩天堂| 激情亚洲一区二区三区四区| 欧美成人性网| 午夜精品久久久久久久99黑人| 嫩草影视亚洲| 亚洲女人天堂av| 激情成人综合| 欧美日韩在线一区二区三区| 欧美亚洲在线视频| 亚洲高清久久网| 欧美在线观看视频在线| 最新高清无码专区| 国产精品一级二级三级| 美女黄色成人网| 亚洲综合色自拍一区| 欧美高清视频一区二区三区在线观看| 在线视频精品一区| 在线观看视频亚洲| 国产精品每日更新在线播放网址| 久久五月婷婷丁香社区| 亚洲一区二区三区影院| 亚洲国产免费看| 久久综合伊人| 性欧美大战久久久久久久免费观看 | 久久久欧美精品| 一区二区激情| 欧美激情片在线观看| 久久不见久久见免费视频1| 欧美日韩在线观看视频| 欧美在线观看日本一区| 日韩视频一区二区三区| 欧美大学生性色视频| 久久9热精品视频| 亚洲天堂黄色| 99re6这里只有精品| 在线成人免费观看| 国产日韩在线视频| 国产精品久久久久7777婷婷| 欧美理论视频| 欧美国产精品劲爆| 久久综合影音| 久久男人av资源网站|