Skip to content

Commit d583882

Browse files
committed
Добавлен мьютекс на критичном участке кода семаформа
1 parent 1f453df commit d583882

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/Классы/Семафор.os

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
Перем мСчетчик;
22
Перем СтандартныйРазмерПаузы;
3+
Перем БлокировкаРесурса;
34

45
// Конструктор.
56
//
@@ -14,7 +15,10 @@
1415
Иначе
1516
мСчетчик = Счетчик;
1617
КонецЕсли;
18+
1719
СтандартныйРазмерПаузы = 10;
20+
БлокировкаРесурса = Новый БлокировкаРесурса(ЭтотОбъект);
21+
1822
КонецПроцедуры
1923

2024
// Осуществить захват семафора.
@@ -28,9 +32,11 @@
2832
Процедура Захватить(ТаймаутОжидания = 0) Экспорт
2933
ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
3034
Пока Истина Цикл
35+
БлокировкаРесурса.Заблокировать();
3136
мСчетчик = мСчетчик - 1;
3237
Если мСчетчик < 0 Тогда
3338
мСчетчик = мСчетчик + 1;
39+
БлокировкаРесурса.Разблокировать();
3440
Если ЗначениеЗаполнено(ТаймаутОжидания) Тогда
3541
ТекущееВремя = ТекущаяУниверсальнаяДатаВМиллисекундах();
3642
Если (ВремяНачала + ТаймаутОжидания) < ТекущееВремя Тогда
@@ -39,6 +45,7 @@
3945
КонецЕсли;
4046
Приостановить(СтандартныйРазмерПаузы);
4147
Иначе
48+
БлокировкаРесурса.Разблокировать();
4249
Прервать;
4350
КонецЕсли;
4451
КонецЦикла;

0 commit comments

Comments
 (0)