Sekcja krytyczna - czy zajęta

0

Jak sprawdzić czy dana sekcja krytyczna jest aktualnie zajęta przez inny wątek? (tylko czy jest zajęta). Otóż teraz jest tak że jak sekcja jest zajeta to wątek czeka na jej zwolnienie poczym wykonuje swoj kod, chcialbym sprawdzac czy sekcja jest zajeta, jak tak to nie wykonywać nic. Sprawdziłem metody sekcji i nic ciekawego tam nie znalazłem :\

0

W WinAPI masz TryEnterCriticalSection - nie blokuje, ale może przejąć sekcję.

0
class TMyCriticalSection : TCriticalSection{
bool FAcquired;

TMyCriticalSection();
~TMyCriticalSection();

Acquire() { FAcquired = true; TCriticalSection::Acquire(); };
Release() { FAcquired = false; TCriticalSection::Release(); };
...
...

__property bool Acquired = .....
};

Coś w ten deseń i już masz sekcje krytyczną z możliwościa sprawdzenia czy jest zablokowana czy nie. Oczywiście metody __property Acquired musza też być zabezpieczone przed dostępem z wielu wątków, najlepiej TMultiReadExclusiveWriteSynchonizer'em. [diabel]

1 użytkowników online, w tym zalogowanych: 0, gości: 1