What exactly is a critical section?

后端 未结 3 1698
伪装坚强ぢ
伪装坚强ぢ 2021-01-18 03:06

Just want a little clarity on the this. Imagine I use the windows api of EnterCriticalSection. I call all of them with EnterCriticalSection(&criticalsection);

相关标签:
3条回答
  • 2021-01-18 03:36

    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.

    0 讨论(0)
  • 2021-01-18 03:45

    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.

    0 讨论(0)
  • 2021-01-18 03:45

    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.

    0 讨论(0)
提交回复
热议问题