|
|
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
Всем привет! Помогите пожалуйста решить следующую проблему: У меня есть некий класс A который имеет некую переменную B. Я создаю N таких объектов в памяти, и потом из двух или более разных потоков (многозадачность) меняю вышеупомянутую переменную в каждом конкретном объекте по разному и в разное время. Проблема в том что мне НЕЛЬЗЯ чтобы к этой переменной в одном отдельно взятом созданном в памяти объекте мог получить доступ более чем один поток одновременно. В теории это можно решить при помощи создания отдельного объекта CRYTICAL_SECTION для каждого созданного экземпляра класса и защитой этой критической секцией метода присвоения переменной значения. Но объектов планируется до сотни тысяч в памяти. Как мне поступить в этом случае? С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 21:59 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
lexlutherНо объектов планируется до сотни тысяч в памяти. Как мне поступить в этом случае? Используй мутексы. CreateMutex, OpenMutex, ReleaseMutex и иже с ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 22:19 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
Вас беспокоит дополнительные ресурсы, которые будут расходоватся на удержание объектов CRYTICAL_SECTION ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 23:28 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
Вообще то критикал секшн самый "худой" из всех остальных майкрософтофских примитивов синхронизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 01:13 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
maytonВас беспокоит дополнительные ресурсы, которые будут расходоватся на удержание объектов CRYTICAL_SECTION ? Скажем мне нужно запретить одновременный доступ к переменной класса, но для каждого созданного объекта отдельно. В смысле чтоб блокирование этой переменной не блокировало изменение этой же переменной в других экземплярах этого класса. Я просто думал что винда не создаст больше чем там допустим 10000 критических секций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 09:15 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
В данном случае мутексы ни к чему. Посмотрите варианты на www.wasm.ru. Я думаю, что 1000000 критических секций вполне реально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 11:20 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
Для случая, когда изменение переменной приводится к одной машинной команде, никаких блокировок не требуется. Но это если потоки получают доступ к уже созданным (!) объектам и объекты не уничтожаются (!), пока с ними ведется работа. Например, объект гарантированно существует и требуется из разных потоков увеличивать какое-то одно поле. Команды загрузки адреса этого поля в любом потоке идет независимо друг от друга, а команда изменения значения поля только одна (inc или add)! Вот для случая, когда требуется взять значение поля, использовать его в сложных расчетах или умножать/делить, а затем результат положить обратно - здесь обязательна блокировка этого поля (т.е. это уже критический участок) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 11:33 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
vinoДля случая, когда изменение переменной приводится к одной машинной команде, никаких блокировок не требуется. vinoВ данном случае мутексы ни к чему. Прям откровение.... На SMP машине в цикле не попробуй "долбить" одну ячейку памяти одной командой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 11:51 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
vinoВ данном случае мутексы ни к чему. Посмотрите варианты на www.wasm.ru. Я думаю, что 1000000 критических секций вполне реально Критическая секция реализуется (в том числе) через объект ядра, посему глыбокой разницы между 10000 мьютексами и аналогичным количеством CS в плане влияния на здоровье системы не вижу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 11:54 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
grexhide vinoДля случая, когда изменение переменной приводится к одной машинной команде, никаких блокировок не требуется. vinoВ данном случае мутексы ни к чему. Прям откровение.... На SMP машине в цикле не попробуй "долбить" одну ячейку памяти одной командой. Можно применить Interlocked операции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 11:56 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
lexlutherНо объектов планируется до сотни тысяч в памяти. Как мне поступить в этом случае? Попробовать переосмыслить архитектуру задачи. может быть лучше будет принципиально другое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 12:39 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
Палестинец lexlutherНо объектов планируется до сотни тысяч в памяти. Как мне поступить в этом случае? Попробовать переосмыслить архитектуру задачи. может быть лучше будет принципиально другое решение. 2 lexluther Честно говря, я затрудняюсь представить себе постановку, при которой потребуется держать сотню тысяч разделяемых объектов в памяти. Вы часом не ядро СУБД разрабатываете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 21:20 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
не понмю, как называется, переменная с пометкой "действие за такт". быстрый доступ короче. аффтопитезь: объект либо именован, либо не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 21:37 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Критическая секция реализуется (в том числе) через объект ядра, посему глыбокой разницы между 10000 мьютексами и аналогичным количеством CS в плане влияния на здоровье системы не вижуCS легковеснее. InterlockedIncrement вроде вообще ничего не потребляет в плане памяти, но там ожидание придётся как-нить по-своему реализовывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 13:16 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
maXmo Gluk (Kazan)Критическая секция реализуется (в том числе) через объект ядра, посему глыбокой разницы между 10000 мьютексами и аналогичным количеством CS в плане влияния на здоровье системы не вижуCS легковеснее. InterlockedIncrement вроде вообще ничего не потребляет в плане памяти, но там ожидание придётся как-нить по-своему реализовывать. Легковеснее в плане CPU, а не использования объектов ядра. Как по вашему происходит засыпание на нем ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 16:19 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
Если я не ошибаюсь, мьютексы все же для межзадачного взаимодействия и реализация их более тяжеловесная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2007, 01:17 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Как по вашему происходит засыпание на нем ???хм… ну не знаю, как обычно. Поток помечается спящим и не получает проца пока не придёт время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 15:21 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
maXmo Gluk (Kazan)Как по вашему происходит засыпание на нем ???хм… ну не знаю, как обычно. Поток помечается спящим и не получает проца пока не придёт время. Поток засыпает на объетке ядра (скорее всего на событии с автосбросом). Объект создается при создании критической секцией и уничтожается вместе с ней. Внимание вопрос: Системе не пофиг-ли насоздавали в ней 100000 мьютексов или событий с автосбросом ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 15:31 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
наверно уж не пофиг, раз мьютекс более функциональная вещь, значит она хавает больше ресурсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 16:14 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
автор по-китайски, что ли, писал? Ему нужно чего попроще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 16:15 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
maXmoнаверно уж не пофиг, раз мьютекс более функциональная вещь, значит она хавает больше ресурсов. а ты создай и посмотри. объект ядра он и в африке объект ядра аффтору Interlocked куда уж проще ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 16:17 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)аффтору Interlocked куда уж проще ???слабать на коленке, конечно, можно, но не факт, что это будет лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 16:19 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
и кстати, КАК было определено, что мьютекс БОЛЕЕ функциональный ??? все равно что сравнивать функциональность сапогов и ботинков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 16:21 |
|
||
|
Проблема многопоточного доступа к переменной
|
|||
|---|---|---|---|
|
#18+
maXmo Gluk (Kazan)аффтору Interlocked куда уж проще ???слабать на коленке, конечно, можно, но не факт, что это будет лучше. Это БУДЕТ лучше, поскольку не будет жрать ценный ресурс. И этого ДОСТАТОЧНО для решения задачи автора (насколько я ее понял). А что, использование CS гарантирует от отсутствия наколенок ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 16:23 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=34312192&tid=1346258]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
187ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 556ms |

| 0 / 0 |
