Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
CloseHandle() не снимает блокировку именованного мутекса
|
|||
|---|---|---|---|
|
#18+
Наткнулся на интересную багофичу виндовса: если заблокировать мутекс и сделать CloseHandle() то он не разблокируется до завершения процесса. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Первый процесс: Код: plaintext 1. 2. 3. 4. 5. 6. Второй процесс: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 09:34 |
|
||
|
CloseHandle() не снимает блокировку именованного мутекса
|
|||
|---|---|---|---|
|
#18+
Никогда с таким не работал, решил почитать доку. В MSDN английскими буквами по белому написано: Only one thread can own a mutex at any given time. The owning thread uses the ReleaseMutex function to release its ownership. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 09:46 |
|
||
|
CloseHandle() не снимает блокировку именованного мутекса
|
|||
|---|---|---|---|
|
#18+
Dima T, подозреваю, что CloseHandle() слишком "широкая" по применению в разных местах функция, чтобы делать все проверки и освобождать/отпускать все ресурсы, которые теоретически могут скрываться в HANDLE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 10:16 |
|
||
|
CloseHandle() не снимает блокировку именованного мутекса
|
|||
|---|---|---|---|
|
#18+
Еще потестил. Если после CloseHandle(mtx) снова открыть, то можно разблокировать Код: plaintext 1. 2. 3. 4. Похоже так задумано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 10:44 |
|
||
|
CloseHandle() не снимает блокировку именованного мутекса
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНикогда с таким не работал, решил почитать доку. В MSDN английскими буквами по белому написано: Only one thread can own a mutex at any given time. The owning thread uses the ReleaseMutex function to release its ownership. Это понятно. Я о другом, считал что CloseHandle() что-то типа деструктора, т.е. если блокировка стоит, то ReleaseMutex() сделает. Оказалось что не так все, надо явно вызывать ReleaseMutex(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 10:49 |
|
||
|
CloseHandle() не снимает блокировку именованного мутекса
|
|||
|---|---|---|---|
|
#18+
Dima TЯ о другом, считал что CloseHandle() что-то типа деструктора, т.е. если блокировка стоит, то ReleaseMutex() сделает. Оказалось что не так все, надо явно вызывать ReleaseMutex(). Это как раз нелогично. По такой логике, только что открытый объект мьютекса должен быть всегда разблокированным, но тогда смысл в именованных мьютексах пропадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 12:20 |
|
||
|
CloseHandle() не снимает блокировку именованного мутекса
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyDima TЯ о другом, считал что CloseHandle() что-то типа деструктора, т.е. если блокировка стоит, то ReleaseMutex() сделает. Оказалось что не так все, надо явно вызывать ReleaseMutex(). Это как раз нелогично. По такой логике, только что открытый объект мьютекса должен быть всегда разблокированным, но тогда смысл в именованных мьютексах пропадает. Странный вывод. ReleaseMutex() не освобождает мутекс захваченный другим потоком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 12:37 |
|
||
|
CloseHandle() не снимает блокировку именованного мутекса
|
|||
|---|---|---|---|
|
#18+
У тебя может быть столько хэндлов одного и того же мутекса, сколько пожелаешь. Освобождение мутекса при закрытии любого из них сделает поведение программы непредсказуемо нестабильным. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 13:08 |
|
||
|
CloseHandle() не снимает блокировку именованного мутекса
|
|||
|---|---|---|---|
|
#18+
CloseHandle() не изменяет состояние объекта, оно всего лишь уничтожает одну ссылку на него. Состояние объекта может измениться автоматически разве что когда количество ссылок на него достигнет нуля. Объект при этом уничтожается. Что может повлечь за собой и другое действие. Файл, например, при этом закрывается. Раз уж мы в разделе С++, можешь думать об этом так: Handle это shared_pointer и уничтожение одного из них не вызывает автоматического срабатывания деструктора объекта. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 13:22 |
|
||
|
CloseHandle() не снимает блокировку именованного мутекса
|
|||
|---|---|---|---|
|
#18+
Dima TЯ о другом, считал что CloseHandle() что-то типа деструктора, т.е. если блокировка стоит, то ReleaseMutex() сделает. Оказалось что не так все, надо явно вызывать ReleaseMutex(). CloseHandle() это не типа деструктора, а типа Release() в COM. (который из IUnknown) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2017, 14:07 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39542383&tid=2018064]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 190ms |

| 0 / 0 |
