![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Синхронизация доступа
skywalker © (2002-02-28 16:13:00)У меня есть оъект, и несколько потоков, которые периодечиски
вносят в него изменения. Как проще всего синхронизировать доступ этих потоков к объекту?
SVM (2002-03-01 10:02:00) [1]Если к тому же несколько читают, то есть могут читать
совместно, то лучше использовать что-то типа
TMultiReadExclusiveWriteSynchronizer
Алексей Петров (2002-03-01 08:45:00) [2]Совершенно верно. При каждой операции с Mutex-ом происходит переключение в режим ядра и обратно, а критические секции основаны на функциях InterlockedIncrement и InterlockedDecriment, работающих в режиме пользователя.
vuk (2002-02-28 17:56:00) [3]>И еще разница в том, что CriticalSection заметно быстрее Mutex-а.
Это, конечно, да. Я так понимаю, что это происходит потому, что этот CriticalSection является объектом не режима ядра, а режима пользователя и не нужно его отслеживать глобально по всей системе, как в случае с Mutex.
Алексей Петров (2002-02-28 17:46:00) [4]>Vuk © (28.02.02 17:41)
И еще разница в том, что CriticalSection заметно быстрее Mutex-а.
Vuk (2002-02-28 17:41:00) [5]Вообще говоря еще есть такая полезная вещь как CriticalSection. По большому счету, отличие от Mutex только в том, что CriticalSection могут использоваться только потоками одного процесса и их иногда проще использовать.
Fellomena (2002-02-28 16:33:00) [6]Самое простое, если необходимо, что бы только один поток имел доступ к ресурсу, - это использовать механизм мьютексов. (см. Mutex)
Если имеет место сложное распаралеливание доступа сразу нескольких потоков, то система семафоров.
Всё реализуется достаточно просто. (см. SDK)