|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
Есть длл, есть там функция, которая долго работает. В паре мест я распаралелил работу, типа: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
И все хорошо, пока не запускать паралельно сию функцию через Task.Factory.StartNew(() => Parallel.For итд Хотя изначально проект и не задумывался как поддерживающий многопоточность, слишком уж сложен. Побегав в отладке как понимаю mre.Set() выполняется одним внешним потоком, когда первый внешний еще не прошел функцию CreateLaser. Ну и дальше NullReferenceException на laserResult. Как бы тут разобраться ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 16:12 |
|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
tual, что именно ты запускаешь через Task и Parellel.For? Зачем ты смешиваешь явное создание потоков с методами TPL (Task Parallel Library)? С какой целью тебе нужна многопоточность? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 16:27 |
|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
Это запускаю не я, это юзер на нет4 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Тот код что я привел в предыдущем посте, тот код внутренний, он должен поддерживать нет2 и выше. Поэтому такие разные подходы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 16:33 |
|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
tual, 1. убрать Task.Factory.StartNew 2. оставить Parallel.For( ... ) 3. покажите код, где объявлен ManualResetEvent. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 16:53 |
|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
Эм, а какой код показывать ? Это кусочек из конструктора внутреннего объекта (internal class). Общая суть в том, что в потоке laserThread и основном потоке должны паралельно отработать 2 функции, а в дальнейшем (после mre.Reset()) их результаты сложиться и дальше уже не важно. Относительно потока я весь код показал. private static ManualResetEvent mre = new ManualResetEvent(false); ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 16:57 |
|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
Изза static чтоли весь сыр бор ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 16:58 |
|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
tual, погодите, для Task есть метод WaitAll() (ну может в названии ошибся). Если вы создаете поток и просто его ждете для этого есть просто thread.Join(). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 17:00 |
|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
Не путайте код net4 (код юзера) и мой (net2) юзер всего лишь вызывает длл. То есть если можно другим кодом юзера безопасно вызвать мою функцию из длл, это одно. Но раз можно вызвать так, что сломается, то мне желательно найти где и как что починить. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 17:02 |
|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
Ну судя по всему именно из-за статика. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 17:22 |
|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
tual, а зачем кстати статиком делали ее? Если будет более 1 экземляра вашего класса? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 17:48 |
|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
Хм, да тупо ошибка. Как раз юзеру доводится о том, что код в длл не является потокобезопасным (проще сказать, это не является целью проекта). То есть юзер какбы сам дурак, но починить все равно надо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 17:58 |
|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
tual, вызов юзера в любом случае неправильный. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 19:09 |
|
Проблемка с многопоточностью
|
|||
---|---|---|---|
#18+
Напиши сначала синхронный код, а потом сделай рефакторинг во многопоточный. Любое применение дополнительных потоков должно быть оправдано. Этот код вообще непонятный: Код: c# 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 20:38 |
|
|
start [/forum/topic.php?fid=20&msg=38264909&tid=1404667]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 311ms |
total: | 472ms |
0 / 0 |