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

posts - 297,  comments - 15,  trackbacks - 0

Critical section

From Wikipedia, the free encyclopedia

Jump to: navigation, search

In concurrent programming a critical section is a piece of code that accesses a shared resource (data structure or device) that must not be concurrently accessed by more than one thread of execution. A critical section will usually terminate in fixed time, and a thread, task or process will only have to wait a fixed time to enter it (i.e. bounded waiting). Some synchronization mechanism is required at the entry and exit of the critical section to ensure exclusive use, for example a semaphore.

By carefully controlling which variables are modified inside and outside the critical section (usually, by accessing important state only from within), concurrent access to that state is prevented. A critical section is typically used when a multithreaded program must update multiple related variables without a separate thread making conflicting changes to that data. In a related situation, a critical section may be used to ensure a shared resource, for example a printer, can only be accessed by one process at a time.

How critical sections are implemented varies among operating systems.

The simplest method is to prevent any change of processor control inside the critical section. On uni-processor systems, this can be done by disabling interrupts on entry into the critical section, avoiding system calls that can cause a context switch while inside the section and restoring interrupts to their previous state on exit. Any thread of execution entering any critical section anywhere in the system will, with this implementation, prevent any other thread, including an interrupt, from getting the CPU and therefore from entering any other critical section or, indeed, any code whatsoever, until the original thread leaves its critical section.

This brute-force approach can be improved upon by using semaphores. To enter a critical section, a thread must obtain a semaphore, which it releases on leaving the section. Other threads are prevented from entering the critical section at the same time as the original thread, but are free to gain control of the CPU and execute other code, including other critical sections that are protected by different semaphores.

Some confusion exists in the literature about the relationship between different critical sections in the same program.[citation needed] In general, a resource that must be protected from concurrent access may be accessed by several pieces of code. Each piece must be guarded by a common semaphore. Is each piece now a critical section or are all the pieces guarded by the same semaphore in aggregate a single critical section? This confusion is evident in definitions of a critical section such as "... a piece of code that can only be executed by one process or thread at a time". This only works if all access to a protected resource is contained in one "piece of code", which requires either the definition of a piece of code or the code itself to be somewhat contrived.

Contents

[hide]

[edit] Application Level Critical Sections

Application-level critical sections reside in the memory range of the process and are usually modifiable by the process itself. This is called a user-space object because the program run by the user (as opposed to the kernel) can modify and interact with the object. However the functions called may jump to kernel-space code to register the user-space object with the kernel.

Example Code For Critical Sections with POSIX pthread library

/* Sample C/C++, Unix/Linux */
#include <pthread.h>

/* This is the critical section object (statically allocated). */
static pthread_mutex_t cs_mutex = PTHREAD_MUTEX_INITIALIZER;

void f()
{
/* Enter the critical section -- other threads are locked out */
pthread_mutex_lock( &cs_mutex );

/* Do some thread-safe processing! */

/*Leave the critical section -- other threads can now pthread_mutex_lock() */
pthread_mutex_unlock( &cs_mutex );
}

Example Code For Critical Sections with Win32 API

/* Sample C/C++, Windows, link to kernel32.dll */
#include <windows.h>

static CRITICAL_SECTION cs; /* This is the critical section object -- once initialized,
it cannot be moved in memory */

/* If you program in OOP, declare this in your class */

/* Initialize the critical section before entering multi-threaded context. */
InitializeCriticalSection(&cs);

void f()
{
/* Enter the critical section -- other threads are locked out */
EnterCriticalSection(&cs);

/* Do some thread-safe processing! */

/* Leave the critical section -- other threads can now EnterCriticalSection() */
LeaveCriticalSection(&cs);
}

/* Release system object when all finished -- usually at the end of the cleanup code */
DeleteCriticalSection(&cs);

Note that on Windows NT (not 9x/ME), the function TryEnterCriticalSection() can be used to attempt to enter the critical section. This function returns immediately so that the thread can do other things if it fails to enter the critical section (usually due to another thread having locked it). With the pthreads library, the equivalent function is pthread_mutex_trylock(). Note that the use of a CriticalSection is not the same as a Win32 Mutex, which is an object used for inter-process synchronization. A Win32 CriticalSection is for intra-process synchronization (and is much faster as far as lock times), however it cannot be shared across processes.

[edit] Kernel Level Critical Sections

Typically, critical sections prevent process and thread migration between processors and the preemption of processes and threads by interrupts and other processes and threads.

Critical sections often allow nesting. Nesting allows multiple critical sections to be entered and exited at little cost.

If the scheduler interrupts the current process or thread in a critical section, the scheduler will either allow the process or thread to run to completion of the critical section, or it will schedule the process or thread for another complete quantum. The scheduler will not migrate the process or thread to another processor, and it will not schedule another process or thread to run while the current process or thread is in a critical section.

Similarly, if an interrupt occurs in a critical section, the interrupt's information is recorded for future processing, and execution is returned to the process or thread in the critical section. Once the critical section is exited, and in some cases the scheduled quantum completes, the pending interrupt will be executed.

Since critical sections may execute only on the processor on which they are entered, synchronization is only required within the executing processor. This allows critical sections to be entered and exited at almost zero cost. No interprocessor synchronization is required, only instruction stream synchronization. Most processors provide the required amount of synchronization by the simple act of interrupting the current execution state. This allows critical sections in most cases to be nothing more than a per processor count of critical sections entered.

Performance enhancements include executing pending interrupts at the exit of all critical sections and allowing the scheduler to run at the exit of all critical sections. Furthermore, pending interrupts may be transferred to other processors for execution.

Critical sections should not be used as a long-lived locking primitive. They should be short enough that the critical section will be entered, executed, and exited without any interrupts occurring, from neither hardware much less the scheduler.

Kernel Level Critical Sections are the base of the software lockout issue.

[edit] See also

[edit] External links

Critical Section documentation on the MSDN Library homepage: http://msdn2.microsoft.com/en-us/library/ms682530.aspx

posted on 2009-05-11 11:48 chatler 閱讀(1258) 評論(0)  編輯 收藏 引用 所屬分類: OS
<2010年2月>
31123456
78910111213
14151617181920
21222324252627
28123456
78910111213

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产在线乱码一区二区三区| 国产精品第一区| 国产精品va在线| 久久最新视频| 久久久亚洲国产美女国产盗摄| 亚洲天堂久久| 一区二区三区日韩欧美精品| 一区二区毛片| 亚洲午夜电影网| 久久精品成人一区二区三区| 久久九九免费| 欧美chengren| 欧美性大战久久久久久久| 国产日韩欧美在线播放不卡| 一区一区视频| 亚洲无吗在线| 久久久免费精品视频| 欧美1区2区| 91久久久一线二线三线品牌| 欧美成人午夜激情视频| 亚洲精品在线看| 亚洲免费在线视频一区 二区| 久久精品国产精品亚洲综合| 免费试看一区| 国产精品美女午夜av| 狠狠色丁香久久婷婷综合丁香| 亚洲区国产区| 久久精品二区| 亚洲狼人精品一区二区三区| 小黄鸭精品密入口导航| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美视频四区| 在线日本高清免费不卡| 亚洲天堂网在线观看| 免费一级欧美在线大片| 亚洲一区二区三区欧美| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品激情av在线播放| 亚洲伦理自拍| 免费在线国产精品| 亚洲综合日韩在线| 欧美日韩一区二区三区四区五区| 一区二区亚洲精品国产| 先锋亚洲精品| 日韩午夜中文字幕| 久久一区精品| 伊大人香蕉综合8在线视| 香蕉久久精品日日躁夜夜躁| 欧美激情亚洲国产| 久久综合色婷婷| 激情久久一区| 久久手机精品视频| 小嫩嫩精品导航| 国产欧美精品在线播放| 午夜精品在线| 亚洲欧美日韩精品在线| 国产精品久久久一区二区| 亚洲午夜精品视频| 亚洲一二三级电影| 91久久在线观看| 老司机免费视频久久| 黑丝一区二区| 玖玖玖国产精品| 久久久久亚洲综合| 黄色亚洲网站| 欧美mv日韩mv国产网站app| 欧美主播一区二区三区| 国产一区二区久久| 久久激情视频久久| 久久精品最新地址| 在线观看视频免费一区二区三区| 免费不卡在线观看| 欧美电影在线观看| 亚洲丝袜av一区| 亚洲综合成人婷婷小说| 国产一区二区精品在线观看| 久久久久久久综合| 久久久精品动漫| 亚洲精品日日夜夜| 制服丝袜激情欧洲亚洲| 国产日韩欧美一区二区三区四区| 欧美一区二区日韩一区二区| 欧美在线观看网站| 亚洲国产成人久久综合| 亚洲乱码国产乱码精品精可以看| 国产精品国产三级国产专播品爱网 | 一区二区三区精品久久久| 欧美日韩中文字幕精品| 欧美在线免费观看视频| 久久精品亚洲| 夜夜嗨av一区二区三区网页| 一本一本a久久| 好吊色欧美一区二区三区四区| 女同一区二区| 欧美日韩三区| 久久久蜜桃精品| 欧美精品一区二区三区在线播放 | 99av国产精品欲麻豆| 国产亚洲一区精品| 亚洲人成网站777色婷婷| 国产精品高潮在线| 美女诱惑一区| 欧美色123| 亚洲第一成人在线| 国产情侣久久| 亚洲精品久久久久久久久久久| 国产精品自在在线| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品视频免费一区| 亚洲国产精品专区久久 | 久久字幕精品一区| 欧美精品18+| 久久久欧美精品| 国产精品视频精品视频| 亚洲国产精品一区二区久| 国产午夜亚洲精品不卡| 亚洲理伦电影| 在线免费观看成人网| 亚洲欧美区自拍先锋| 一区二区三区视频在线| 久久久视频精品| 久久av红桃一区二区小说| 欧美精品一区二区三区在线看午夜| 久久精品亚洲乱码伦伦中文| 国产精品久久久久9999高清| 亚洲黄网站黄| 亚洲国产第一页| 久久久国产一区二区| 久久久久久久欧美精品| 国产日韩一区二区三区| 亚洲一级高清| 欧美亚洲日本国产| 国产精品亚洲综合色区韩国| 在线一区二区三区做爰视频网站| 一区二区三区四区五区在线| 欧美精品一区二区三区四区| 亚洲国产精品一区二区第四页av| 亚洲国产一区二区三区在线播| 久久精品国产综合精品| 久久精品五月婷婷| 国模精品一区二区三区色天香| 欧美伊久线香蕉线新在线| 久久精品天堂| 亚洲国产精品999| 欧美福利在线| 日韩视频永久免费观看| 99伊人成综合| 欧美视频在线观看一区| 中日韩高清电影网| 欧美一区二区免费视频| 国产综合色精品一区二区三区| 欧美在线免费观看亚洲| 久久午夜影视| 亚洲国产精品久久| 欧美日韩中文在线| 欧美亚洲日本国产| 欧美高清自拍一区| 亚洲一区二区黄| 国产欧美日韩三级| 久久婷婷蜜乳一本欲蜜臀| 欧美国产欧美亚州国产日韩mv天天看完整| 1000部精品久久久久久久久 | 国产精品久久久久9999| 欧美一区中文字幕| 欧美高清视频一区二区三区在线观看| 亚洲日本乱码在线观看| 欧美视频一区在线观看| 欧美亚洲网站| 欧美激情亚洲自拍| 亚洲一区二区三区四区在线观看 | 欧美a级大片| 一本色道久久88亚洲综合88| 久久精品国产免费观看| 亚洲精品一区二区三区99| 国产精品久久久久久五月尺| 欧美风情在线观看| 亚洲一区激情| 在线免费一区三区| 国产精品第三页| 老司机亚洲精品| 亚洲午夜精品久久久久久浪潮| 老色鬼久久亚洲一区二区| 亚洲图色在线| 伊人夜夜躁av伊人久久| 欧美三级电影精品| 久久免费视频在线| 午夜国产精品视频免费体验区| 免费视频亚洲| 亚洲欧美日韩综合国产aⅴ| 91久久精品国产91性色tv| 国产伦精品一区二区三区免费| 欧美成人精品激情在线观看| 欧美在线关看| 午夜精品视频网站| 一区二区精品在线| 亚洲国产成人久久综合| 免费久久精品视频| 久久国产精品亚洲77777| 午夜视频精品| 亚洲欧美日韩精品一区二区|