/*
Исходный код среды исполнения ПВТ-ОО.
Этот исходный код является частью проекта ПВТ-ОО.
Copyright © 2021 Малик Разработчик
Это свободная программа: вы можете перераспространять её и/или
изменять её на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
в каком она была опубликована Фондом свободного программного обеспечения;
либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она может быть полезна,
но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
общественной лицензии GNU.
Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
вместе с этой программой. Если это не так, см.
<http://www.gnu.org/licenses/>.
*/
package platform.dependent;
public class Mutex(Object)
{
private final long fldPointer;
private final CriticalSection fldOperation;
public () { fldPointer = (fldOperation = new CriticalSection()).getPointer(); }
public void lock() { Kernel32.enterCriticalSection(fldPointer); }
public void unlock() { Kernel32.leaveCriticalSection(fldPointer); }
public boolean isHold() { return fldOperation.owningThread != Kernel32.NULL; }
protected final void afterConstruction() { Kernel32.initializeCriticalSection(fldPointer); }
protected final void beforeDestruction() { Kernel32.deleteCriticalSection(fldPointer); }
}