реклама на сайте
подробности

 
 
> синхронизация потоков
Sagittarius
сообщение Sep 25 2012, 11:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Здравствуйте.

Подскажите пожалуйста, какими средствами сделать: есть несколько потоков Task1..TaskN, которые кладут данные в одну очередь, обрабатываемую потоком DoTask. Все потоки Task1..TaskN запихивают данные в очередь через один метод класса, содержащего DoTask. При этом надо чтоб каждая из задач дождалась обработки своих данных в очереди. Как это сделать? Пока что придумал только вместе с данными запихивать в очередь указатель на семафор и время его жизни, но для этого надо либо использовать heap2-3 или переделать семафор чтоб он располагался в стеке создающего его потока. Но хочется heap1 и без переделок.

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
juvf
сообщение Sep 27 2012, 02:30
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(Sagittarius @ Sep 25 2012, 17:13) *
Здравствуйте.

... есть несколько потоков Task1..TaskN, которые кладут данные в одну очередь, обрабатываемую потоком DoTask. Все потоки Task1..TaskN запихивают данные в очередь

А что мешает на каждый Task1..TaskN сделать отдельную очередь?
Цитата
При этом надо чтоб каждая из задач дождалась обработки своих данных в очереди. Как это сделать?

TaskN дожидается пока ёвная очередь станет пустой, только после этого помещает новые данные. DoTask берёт данные из очереди методом xQueuePeek не удаляя их из очереди. после обработки удаляем данные из очереди, тем самым позволяя TaskN помещать туда новые данные.
Go to the top of the page
 
+Quote Post
Sagittarius
сообщение Sep 27 2012, 10:47
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Цитата(juvf @ Sep 27 2012, 06:30) *
А что мешает на каждый Task1..TaskN сделать отдельную очередь?

а при написании кода не известно сколько будет этих тасков, по тому очередь одна, кладут туда все. Смысла в нескольких очередях нет, тогда достаточно просто семафор и вызов функции обработки.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 22:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016