Блокировка объектов с целым числом

У меня есть куча объектов, и каждый объект имеет уникальный идентификатор.

Мне нужно заблокировать объекты так, чтобы только одному из объектов было разрешено выполнять определенную операцию одновременно.

У меня появилась идея определить целое число, к которому имеют доступ все объекты.

Если блокировка свободна, целое число содержит ноль. Затем объекту разрешается помещать свой собственный уникальный идентификатор в целое число, выполнять операцию и впоследствии возвращать ноль.

Если какой-либо другой объект проверяет целое число, пока он заблокирован, он увидит ненулевое значение, отличное от своего собственного идентификатора, и будет отменен.

Я почти на 100% уверен, что я заново изобретаю старый принцип, но не учусь CS, я даже не знаю, как он называется, поэтому я не знаю, что искать.

Является ли мой подход к блокировке звука / ошибочным, и что я должен читать?

Обратите внимание, что это довольно низкий уровень 61131-3/PLC-программирования, поэтому нет шаблонов Singleton и т. Д.

Спасибо

2 ответа

Ваше описание очень похоже на блокировку, известную по многопроцессорному программированию.

Если вы используете только один процесс или сканирование ПЛК, ваша идея использовать общее целое число будет работать. В противном случае вам придется сделать немного больше, чтобы не допустить одновременной блокировки ваших объектов. Также вы должны добавить функциональность в вашу программу, чтобы выйти из тупика, то есть, если объект делает блокировку и никогда не снимает ее снова.

Вот объяснение блокировки в Вики: https://en.wikipedia.org/wiki/Lock_(computer_science)

Использование блокировки зависит от того, какую марку ПЛК вы используете, о чем вы не упомянули. Если вы, например, используете TwinCAT3, вы можете использовать "FB_IecCriticalSection", описанный здесь:

https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/9007201580758155.html&id=7922950705104221030

Дополнительная информация по теме (для TwinCAT): https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/18014403093939979.html&id=3121411705348577788

Другие вопросы по тегам