00001 /* 00002 * This file contains class that encapsulate system critical section. 00003 * 00004 * Author: 00005 * Tomas Mrkvicka 00006 * xmrkvi03@stud.fit.vutbr.cz 00007 * 00008 */ 00009 00010 #include "pipeline/CriticalSection.h" 00011 00012 //////////////////////////////////////////////////////////////////////////////// 00013 //////////////////////////////////////////////////////////////////////////////// 00014 //////////////////////////////////////////////////////////////////////////////// 00015 // TCriticalSection 00016 00017 /** Konstruktor. 00018 * 00019 * Inicializuje kritickou sekci. 00020 */ 00021 TCriticalSection::TCriticalSection(void) 00022 { 00023 InitializeCriticalSection(&m_section); 00024 } 00025 //OK 2007-08-25 02:21:09 B04-315B\Tom 00026 00027 /** Destruktor. 00028 * 00029 * Zrusi kritickou sekci. 00030 */ 00031 TCriticalSection::~TCriticalSection(void) 00032 { 00033 DeleteCriticalSection(&m_section); 00034 } 00035 //OK 2007-08-25 02:21:11 B04-315B\Tom 00036 00037 /** Vstup do kriticke sekce. 00038 * 00039 * Volani metody je blokujici az do vstupu do kriticke sekce. 00040 * Tj. pokud jiz jine vlakno zavolalo tuto metodu na tomto objektu 00041 * pak ostatni vlakna musi cekat. 00042 */ 00043 void TCriticalSection::Enter(void) 00044 { 00045 EnterCriticalSection(&m_section); 00046 } 00047 //OK 2007-08-25 02:21:14 B04-315B\Tom 00048 00049 /** Uvolneni kriticke sekce. 00050 * 00051 * Metoda smi byt volana pouze po zavolani metody Enter (po vstupu do sekce). 00052 * Zaroven odblokuje ostatni vlakna ktera pristupuji k teto kriticke sekci. 00053 */ 00054 void TCriticalSection::Leave(void) 00055 { 00056 LeaveCriticalSection(&m_section); 00057 } 00058 //OK 2007-08-25 02:21:42 B04-315B\Tom 00059 00060 // TCriticalSection 00061 //////////////////////////////////////////////////////////////////////////////// 00062 //////////////////////////////////////////////////////////////////////////////// 00063 ////////////////////////////////////////////////////////////////////////////////