1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
|
|||||||||||
1 | |||||||||||
Многопоточное программирование по Шилдту: разобрать код03.01.2013, 19:55. Показов 1875. Ответов 5
Метки нет Все метки)
(
Друзья, у меня вопрос от новичка. Читаю книгу Шилдта и вот дошёл до главы многопоточного программирования. В книге приведён следующий пример, демонстрирующий работу методов lock, Wait, Pulse:
Результат выполнения кода такой тик так тик так тик так тик так тик так Часы остановлены Вопрос в следующем: в этом коде создаётся два потока. В программе внутри одного класса, в разных методах есть участок кода, заключенный в инструкцию
Спасибо! После Ваших ответов, думаю возникнут дополнительные вопросы, которые я задам.
0
|
|
03.01.2013, 19:55 | |
Ответы с готовыми решениями:
5
Многопоточность (по Шилдту) - разобрать строку кода Криптография, многопоточное программирование, сетевое программирование Многопоточное программирование Многопоточное программирование |
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
|
|
03.01.2013, 22:28 | 2 |
насколько я понимаю
lock блокирует не код, а объект, соответственно когда код в другом потоке пытается заблокировать тот же объект и обнаруживает, что он заблокирован другим потоком - ожидает разрешения его использовать
1
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|
03.01.2013, 22:32 | 3 |
dima-dima, Проблема с использованием данных несколькими потоками очень существенна.
Это один из способов ее решение. Дать возможность только одному потоку работать с данными в данный момент. Там дальше идет речь о транзакциях и проблемах связанных с необдуманным использованием доступа к данным. p.s. The lock keyword marks a statement block as a critical section by obtaining the mutual-exclusion lock for a given object, executing a statement, and then releasing the lock.
1
|
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
|
|
04.01.2013, 07:19 [ТС] | 4 |
Поправьте, если я не верно понял:
Если в инструкцию lock заключить несколько участков кода (всё в рамках одного объекта), то в момент выполнения одним из потоков любого из участков блокируется и остальные. Если в инструкцию lock заключить несколько участков кода, (в рамках нескольких объектов), то в момент выполнение одним из потоков любого из участков блокируется и остальные, кроме тех, в параметрах lock которых указаны другие объекты.
0
|
Master of Orion
![]() |
|
04.01.2013, 15:38 | 5 |
dima-dima, http://ru.wikipedia.org/wiki/%... 0%B8%D1%8F
параметро lock блокирует доступ к объекту блокировки. Если у вас есть 2 блока lock(this), то при достижении одним потоков любого из этих блоков, никакой другой поток не сможет продолжить выполнение. Если же у вас 2 блока lock(obj1) и lock(obj2) то при достижении потоком lock(obj1) будут блокироваться только потоки, которые будут посягать на этот объкт, то есть если следующий поток достигает lock(obj2), то он спокойно заходит в критическую секцию, так как занимаются различные критические ресурсы.
1
|
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
|
|
04.01.2013, 16:14 [ТС] | 6 |
Спасибо, друзья. Пока вопросов нет.
0
|
04.01.2013, 16:14 | |
Помогаю со студенческими работами здесь
6
Многопоточное программирование Многопоточное программирование Многопоточное программирование на С++ Многопоточное программирование Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |