22.01.2007, 11:33
общий
это ответ
Здравствуйте, Tek!
Нет, неименованные мутексы не могут "пересечься". если ты создаешь новый неименованный мутекс, то всегда создается еще один мутекс (ОС не пытается открыть существующий). это удобно использовать, если handle на мутекс нужен только в пределах одного процесса (для синхронизации отдельных его потоков), в то время как таких процессов может быть несколько одновременно. так что в твоем случае проблема скорее всего где-то еще.
потенциально опасное место применения объектов синхронизации демонстрирует следующий код (допустим, нам необходимо "получить" два мутекса):
в одном месте:
WaitForSingleObject (mutex1, INFINITE);
WaitForSingleObject (mutex2, INFINITE);
в другом месте:
WaitForSingleObject (mutex2, INFINITE);
WaitForSingleObject (mutex1, INFINITE);
тогда возможна ситуация, что один поток "получит" мутекс1 и будет ждать мутекс 2, в то время как второй поток "получит" мутекс2 и будет ждать мутекс1. вот тут будет deadlock.