67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 392
|
|
1 | |
Semaphore Wait(int millisecondsTimeout)22.04.2017, 17:36. Показов 555. Ответов 7
Метки нет (Все метки)
Добрый день. Разбираюсь в многопоточном программировании.
Скажите пожалуйста, что именно означает этот таймаут? Что будет если ресурс не будет освобожден за это время? Заранее спасибо.
0
|
22.04.2017, 17:36 | |
Ответы с готовыми решениями:
7
Java.lang.IllegalMonitorStateException: object not locked by thread before wait() при вызове метода wait() Какая из этих функций int Q(int w) int W(int y,int u,int i) сработает быстрее? Не работает перегрузка индексного оператора [], вместо [int][int] почему то нужно ставить [0][int][int] Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec |
138 / 138 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
|
22.04.2017, 19:08 | 2 |
это значит, что доступ будет получен либо когда ресурс освбодится, либо по истечении таймаута.
0
|
1144 / 853 / 262
Регистрация: 30.04.2009
Сообщений: 3,581
|
|
26.04.2017, 22:49 | 3 |
jr_, не путайте человека.
По истечению таймаута Wait вернет false - означает, что доступ к ресурсу не получен.
0
|
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
27.04.2017, 10:21 | 4 |
jr_ все правильно сказал: доступ к критической зоне будет получен, но он будет не эксклюзивным.
0
|
1144 / 853 / 262
Регистрация: 30.04.2009
Сообщений: 3,581
|
|
27.04.2017, 11:53 | 5 |
kolorotur, что значит неэксклюзивный доступ?
Можете привести реальный пример, когда по таймауту есть смысл давать доступ к ресурсу?
0
|
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
27.04.2017, 13:31 | 6 |
По сути, несинхронизированный: если ожидание завершилось из-за таймаута, то нет гарантии того, что текущий поток единственный, использующий общий ресурс. Следовательно, дальнейшее использование общего ресурса — на свой страх и риск.
Может и есть какой-нибудь экзотический случай, но мне такие в практике пока что не попадались.
0
|
1144 / 853 / 262
Регистрация: 30.04.2009
Сообщений: 3,581
|
|
27.04.2017, 14:09 | 7 |
Я тоже такого не встречал.
Обычно по истечению таймаута требуется обработать эту исключительную ситуацию не предоставляя доступа к ресурсу, например бросить исключение TimeoutException, или залогировать и попробовать еще раз. Т.е. для отладки и повышения устойчивости системы в условиях риска возникновения dead lock-ов.
1
|
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
27.04.2017, 14:16 | 8 |
Бесспорно.
Мое пояснение было только о том, что сам по себе таймаут мьютекса не предотвращает дальнейшего доступа к общему ресурсу, просто возвращаемое значение (false) указывает на то, что делать это небезопасно.
1
|
27.04.2017, 14:16 | |
27.04.2017, 14:16 | |
Помогаю со студенческими работами здесь
8
[C++ Error] Unit2.cpp(22): E2034 Cannot convert 'int (*)(int,int *)' to 'int' Semaphore void _fastcall TForm1::Vector(int x0, int y0, int a, int l); Dictionary<int,List<int>> и IReadOnlyDictionary<int,IReadOnlyList<int>> Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |