What exactly is a critical section?

自作多情 提交于 2019-12-01 17:46:46

Critical section is a code chunk. If any thread entered it, no other thread can enter until it's free. If 1 and 2 are different critical sections (i.e. handled by a different semaphore), someone can enter 2 if 1 is occupied.

The rule is simple: only one thread can execute code inside a particular critical section (any portion of code executed between calls to EnterCriticalSection and LeaveCriticalSection on the same instance). From the point of view of the operating system things like portions of code, functions are irrelevant here. The only thing that matters is the number of calls to the mentioned routines. Whenever a situation happens that some thread called EnterCriticalSection more times than LeaveCriticalSection on a particular critical section object, it is said to be "inside that critical section".

That said you can have multiple critical sections created and they are enforced independently. So one critical section is never affecting another critical section. Different critical sections are created using separate calls to the constructor.

See this:

Consider a variable

int k

two threads are operating on k with this statement

k+=100;

Now assume k equals to 0. The first thread starts to read k, find k=0, then add k by 100. Then the second thread starts to read k before the 1st thread write k=100 back. Then the second thread will assume k=0 and add it by 100 and finally after two threads join k=100 not expected 200. This is the reason we set k+=100 a critical section.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!