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

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 閱讀(1256) 評論(0)  編輯 收藏 引用 所屬分類: OS
<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用鏈接

留言簿(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>
            亚洲精品日韩精品| 久久三级福利| 一区二区三区视频观看| 欧美日韩亚洲一区二区三区| 亚洲欧美在线磁力| 国产欧美一区二区色老头 | 美女网站久久| 日韩一二在线观看| 这里只有视频精品| 国产一区91| 男女激情久久| 欧美精品免费观看二区| 中文国产一区| 久久九九免费视频| 亚洲精品一区二区三区不| 日韩视频精品在线观看| 国产日韩精品电影| 亚洲国产成人精品视频| 欧美日韩一区综合| 久久久之久亚州精品露出| 欧美成人a视频| 午夜精品久久久久影视| 久久久精品国产免大香伊| 亚洲精品视频在线播放| 午夜老司机精品| 日韩视频一区二区三区在线播放免费观看 | 亚洲人成小说网站色在线| 国产精品激情| 欧美国产亚洲视频| 国产麻豆精品久久一二三| 亚洲成色777777在线观看影院| 国产精品国内视频| 欧美激情小视频| 国产午夜精品美女视频明星a级| 亚洲三级观看| 亚洲国产成人在线视频| 亚洲一级二级| 亚洲国产日韩一区| 久久久亚洲午夜电影| 欧美日韩一区二区免费视频| 久久精彩免费视频| 欧美激情第9页| 久久av一区二区三区| 欧美1区2区| 久久久久久日产精品| 欧美精品免费视频| 欧美va天堂| 欧美精品99| 久久亚洲一区| 国产精品红桃| 亚洲黄色免费电影| 在线成人av.com| 亚洲免费婷婷| 中文在线资源观看网站视频免费不卡| 欧美一区在线看| 亚洲欧美日韩国产成人精品影院| 久久综合九色九九| 久久精品视频免费| 国产精品久久久久久久久久久久| 欧美黑人国产人伦爽爽爽| 国产视频一区在线| 一本色道久久综合亚洲精品按摩 | 久久视频国产精品免费视频在线| 亚洲自拍偷拍一区| 欧美久久久久久久久| 欧美 日韩 国产 一区| 国产精品入口66mio| 亚洲性色视频| 亚洲综合视频1区| 欧美三级乱人伦电影| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲欧美日韩网| 亚洲天堂av高清| 欧美日韩岛国| 亚洲日本中文字幕| 一区二区三区四区在线| 欧美韩日视频| 亚洲区第一页| 一区二区三区日韩精品| 美女视频网站黄色亚洲| 亚洲激情国产| 99国产精品久久久久老师| 欧美国产日韩在线观看| 最新高清无码专区| 日韩亚洲欧美高清| 欧美日韩aaaaa| 一区二区三区四区五区视频| 亚洲一区日本| 国产精自产拍久久久久久| 亚洲欧美激情在线视频| 欧美一区二区三区免费大片| 国产视频亚洲精品| 久久一区国产| 亚洲精品一级| 国产曰批免费观看久久久| 欧美jizz19hd性欧美| 亚洲精品乱码久久久久久黑人 | 国产精品一区免费视频| 午夜精品久久久久久久99水蜜桃 | 1024欧美极品| 欧美人与性动交cc0o| 一区二区三区精品久久久| 欧美与欧洲交xxxx免费观看| 国产欧美va欧美va香蕉在| 亚洲一区观看| 亚洲视频www| 欧美午夜精品久久久| 日韩视频一区二区| 欧美一区二区三区婷婷月色| 国产一区二三区| 欧美成人免费小视频| 在线天堂一区av电影| 久久亚洲精品网站| 亚洲午夜久久久| 国产综合色产| 欧美高清视频一二三区| 亚洲欧洲日产国产综合网| 亚洲欧美日韩另类| 亚洲激情小视频| 国产精品亚洲综合久久| 欧美成人四级电影| 欧美一区二区三区四区在线观看 | 欧美日韩在线不卡一区| 夜夜嗨av一区二区三区网站四季av| 麻豆9191精品国产| 亚洲视频免费在线| 欧美国产一区二区| 久久精品国产99精品国产亚洲性色| 亚洲欧洲综合另类| 国产一区自拍视频| 国产精品免费小视频| 欧美国产日本高清在线| 久久激情视频免费观看| 中日韩在线视频| 亚洲欧洲日产国码二区| 蜜月aⅴ免费一区二区三区| 亚洲欧美中文另类| 亚洲国产精品久久久久秋霞不卡 | 在线视频亚洲一区| 一区二区三区免费观看| 亚洲国产精品综合| 欧美成人r级一区二区三区| 久久不射中文字幕| 午夜精品久久久久久久99樱桃| 亚洲人成人99网站| 91久久精品国产91久久性色tv| 国产最新精品精品你懂的| 亚洲作爱视频| 久久黄色网页| 欧美一站二站| 亚洲欧美大片| 久久精品国产亚洲高清剧情介绍| 在线亚洲国产精品网站| 99re亚洲国产精品| 亚洲片国产一区一级在线观看| 欧美激情成人在线| 欧美www在线| 亚洲成人直播| 亚洲国产一区二区三区高清| 亚洲国产mv| 亚洲精品中文字| 亚洲国产三级网| 99精品国产在热久久| 一本大道久久a久久精品综合| 亚洲美女中文字幕| 在线午夜精品自拍| 亚洲午夜女主播在线直播| 亚洲一区二三| 午夜精品免费视频| 久久久久国产一区二区三区四区| 欧美一级专区| 久久综合中文| 欧美美女福利视频| 国产精品乱码人人做人人爱| 欧美日韩亚洲一区二区三区在线观看| 久热精品视频在线免费观看| 欧美精品免费播放| 国产日产精品一区二区三区四区的观看方式 | 午夜综合激情| 久久久欧美精品sm网站| 欧美激情乱人伦| 一区二区三区四区五区精品视频| 亚洲一区二区高清| 久久国产欧美精品| 欧美激情一区二区久久久| 国产精品成人免费精品自在线观看| 国产美女一区| 亚洲国产欧美在线| 亚洲欧美日韩高清| 女同性一区二区三区人了人一 | 亚洲乱码视频| 欧美亚洲自偷自偷| 欧美激情第三页| 中文一区二区| 美女国产一区| 欧美性片在线观看| 亚洲国产99精品国自产| 亚洲图片欧美日产| 麻豆国产va免费精品高清在线| 99re8这里有精品热视频免费|