Michael Schnell schrieb:
On 06/28/2011 05:33 PM, Hans-Peter Diettrich wrote:


A critical section (process-local MUTEX) is not related to a specific (memory) resource, except itself, consequently it can not protect any *other* resource. It also does not block any other thread, not waiting for entering the critical section, so that all resources are accessible by all threads, except the critical section (or mutex...) itself.
I understand that you are supposed to do

 CriticalSection.Enter;
   do something with the variables that are protected
 CriticalSection.leave;

What did you think how to use them ? Of course a MUTEX can do other things, too, but here we are discussing "normal" CriticalSection use.

I suspect that some people expect too much from CriticalSection. E.g.

>    do something with the variables that are protected

sounds nice, but it does not hinder any other code to do something with the same variables, at the same time, *without* entering the CS. This should be made clear in some tutorial, and should be known to everybody talking about threads.

Above code snippet IMO is not enough, instead it should be encapsulated in a class that also *provides* the mentioned CriticalSection. When all critical methods of that class use above pattern internally, and the class also keeps the protected variables strictly private (see TThreadList), then we have a nice example for the correct use of critical sections or other mutexes.

DoDi


--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to