Если все это в одном процессе, то именованные мьютексы вообще не нужны. Просто создайте список или массив из N объектов и используйте lock
.
const int NumLocks = 100;
List<object> LockObjects = new List<object>(NumLocks);
// to initialize
for (int i = 0; i < NumLocks; ++i)
{
LockObjects.Add(new object());
}
// and your loop
for (int i = 0; i < NumLocks; ++i)
{
// if current thread needs lock[i] then
lock(LockObjects[i])
{
// do whatever you need to do
// and then release the lock
}
}
Кроме того, вы можете заблокировать отдельные объекты ресурсов. Если они действительно являются объектами. Я обнаружил, что использование отдельного объекта блокировки легче понять и поддерживать, потому что «ресурс» может быть методом или группой объектов. Объект блокировки - это абстракция, которая, на мой взгляд, помогает в понимании.
Если это нужно нескольким процессам, то я не вижу хорошего решения, кроме использования Mutex
. Тем не менее, я бы предложил создать список этих Mutex
объектов в начале вашей программы и держать их рядом. Таким образом, в цикле все, что вам нужно сделать, это WaitOne
- нет необходимости каждый раз создавать объект в цикле.