Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2017-03

Critical Section and Recursive Calls

2 messages · 2 people ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

African Wild Dog

Hello,

I'm writing a function protected by a critical section which can have recursive calls under certain conditions.

Using the TCriticalSection class, after my thread acquires a critical section, if my thread make 6 additional calls to TCriticalSection.Enter, to release the critical section my thread will have to make 6 additional calls to TCriticalSection.Leave?

If so, is this behaviour the same on all platforms?

From the Windows API:

*"After a thread has ownership of a critical section, it can make additional calls to EnterCriticalSection or TryEnterCriticalSection without blocking its execution. This prevents a thread from deadlocking itself while waiting for a critical section that it already owns. The thread enters the critical section each time EnterCriticalSection and TryEnterCriticalSection succeed. A thread must call LeaveCriticalSection once for each time that it entered the critical section."*

Regards

Mattias Gaertner
to African Wild Dog
Show quoted text 9 lines
Hello, I'm writing a function protected by a critical section which can have recursive calls under certain conditions. Using the TCriticalSection class, after my thread acquires a critical section, if my thread make 6 additional calls to TCriticalSection.Enter, to release the critical section my thread will have to make 6 additional calls to TCriticalSection.Leave?

Yes.

If so, is this behaviour the same on all platforms?

Yes.

Mattias