Deutsch

Задачка на синхронизацию

1617  1 2 все
Fleitist прохожий25.02.24 13:00
NEW 25.02.24 13:00 
в ответ MrSanders 25.02.24 10:44

AA и BB должны синхронизоваться.


Или исключения только для групп методов: "все методы этой группы могут исполняться одновременно, но не больше 1 потока на каждый отдельный метод"?

так и есть.

#21 
MrSanders коренной житель26.02.24 09:41
NEW 26.02.24 09:41 
в ответ Fleitist 25.02.24 13:00

Наверное самое простое (но не самое элегантное) решение - использовать кучу мониторов - по количеству членов "параллельных" групп.

Для варианта ABCD и одной "параллельной" группы AB - два монитора monA и monB. Метод А ждёт свободного monA, метод B - monB, соответственно. C и D же должны забирать себе оба монитора.

A работает - занят monA. B может начать работать? - Да, monB не занят. C, D может начать работать? - Нет, monA занят. Ещё один A может начать работать? - Нет, monA занят.

#22 
NightWatch коренной житель26.02.24 17:14
NightWatch
NEW 26.02.24 17:14 
в ответ Fleitist 24.02.24 20:06
Но на первый пункт браво. Очень близко.

Переосмыслил код еще раз. Вообще не будет работать. Даже близко.

#23 
Fleitist прохожий27.02.24 14:34
NEW 27.02.24 14:34 
в ответ MrSanders 26.02.24 09:41
C и D же должны забирать себе оба монитора.

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

#24 
Fleitist прохожий02.03.24 20:18
NEW 02.03.24 20:18 
в ответ MrSanders 26.02.24 09:41, Последний раз изменено 02.03.24 20:24 (Fleitist)

Решение с отдельным семафором для каждого члена "параллельной" группы имеет место быть. Оно рабочее, но не масштабируемое (не вполне и не красиво). Мы от него отказались в пользу командного процессора, который вообще не требует объектов синхронизации, так как полностью, из коробки, контролирует время жизни любой из команд и любых комбинаций оных. Всем спасибо за участие.

#25 
1 2 все