Мутексы. Нужен ли CloseHandle после ReleaseMutex?

Тема в разделе "WASM.BEGINNERS", создана пользователем KaPax, 16 дек 2008.

  1. KaPax

    KaPax New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    10
    САБЖ

    Нужно ли вызывать CloseHandle(MutexHandle) после ReleaseMutex(MutexHandle) ?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    помоему это совершенно разные операции.
    если тебе мьютекс больше не нужен - закрывай хендл.
    а захват и освобождение тут совсем не при чем
     
  3. KaPax

    KaPax New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    10
    Спасибо за ответ
    Смотри, нужно синхронизировать 2 процесса

    Делаю так

    MutexHandle = OpenMutex()
    if (MutexHandle)
    {
    WaitForSingleObject(MutexHandle);
    }
    MutexHandle = CreateMutex()

    .... далее идет код, ради которого все и затевалось

    /*Теперь нужно сделать так, чтобы освободить мутекс в нашем процессе и чтобы в другом началось выполнение кода
    Мутекс более не нужен
    Нам нужно закрыть хендл или зарелизить? */
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    это что за цирковой номер? зачем сначала опен потом крейт.

    Если нужно освободить мьютекс - делаешь релиз. Если мьютекс вообще больше никогда не нужен - закрываешь хендл
     
  5. KaPax

    KaPax New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    10
    ну... у вас на форуме нашел такое решение =)
    Если открылся - значит мутекс существует... Если не открылся - тогда криейт.

    А как нужно?

    Просьба не пинать, я только учусь :)
     
  6. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    KaPax

    MutexHandle = OpenMutex()
    if (MutexHandle)
    {
    WaitForSingleObject(MutexHandle);
    }
    else{
    MutexHandle = CreateMutex()
    }
     
  7. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    да, суть наверное такая, т.к. кода не видел
    можно просто открыть, а потом вызвать GetLastError, чтобы узнать, существует он уже или нет
     
  8. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    KaPax Rustem MSoft
    Если вызвать CreateMutex к уже существующему именованному Mutex'у, то он вернёт хэндл к нему. Так что для данной задачи в "цирковых номерах" с OpenMutex необходимости нет.
     
  9. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    l_inc, а если надо проверить существование мутекса? Тогда или сначала открыть его, или использовать GetLastError, как я и говорил. Поэтому не вижу противоречий в моих словах ;)
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    MSoft
    Я ж написал: "Для данной задачи". А в данной задаче у нас в случае отсутствия Mutex'а он всё равно будет создан. Поэтому смысла в OpenMutex нет.