Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];

Вниз

управление потоками   Найти похожие ветки 

 
Dot   (2007-08-02 12:30) [0]

Приветствую всех.
существует такая задача.
поток A должен породить n потоков B, каждый из которых должен породить n потоков C.
при этом по завершению i-ого потока B, поток A создаёт ещё поток из этой серии, то есть число потоков должно оставаться постоянным = n.
тоже самое и с потоками серии С.
собственно я объявляю
N = 10; к примеру
и далее используя мьютексы каждый поток класса B при завершении делает декремент глобального счетчика, который в свою очередь инкрементируется потоком A при порождении потока серии B. там же, в потоке A я проверяю условие равенства n и глобального счётчика, если счётчик меньше, то создаю ещё один поток серии B.

однако, как уже может быть стало кому понятно, при порождении потоков класса C нам придётся создавать n глобальных счётчиков , иначе, если мы будем работать с одним, то создастя всего n потоков C серии первым потоком из серии B.

корочем как решить эту проблему?  
массив счётчиков?
не совсем дружу с условными переменными, потому приму любую помощь


 
tesseract ©   (2007-08-02 12:35) [1]

Попробуй создать класс потока с счётчиком дочерних - имхо так будет проще и логичней.

ЗЫ:  При обращении к счётчику из дочерних потоков, не забываем про крит секции.


 
Dot   (2007-08-02 12:38) [2]

вообще я пишу на С под FreeBSD, потому с классами работать никак не получится.
крит сексия и мьютекс собственно одно и тоже, не забываю =)
мне собственно алгоритм нужен..
я вот подумал передавать потокам C в качестве аргумента указатель на счётчик, который будет в области памяти потока B. в общем то оно верно, однако у меня уже есть что передавать в качестве аргумента, и как это провернуть не знаю =(


 
umbra ©   (2007-08-02 13:21) [3]


> однако у меня уже есть что передавать в качестве аргумента

передавайте указатель на запись, в которой содержатся все нужные аргументы.


 
Dot   (2007-08-02 13:28) [4]

только и остаётся что так..
спасибо большое


 
tesseract ©   (2007-08-02 15:09) [5]


> вообще я пишу на С под FreeBSD, потому с классами работать
> никак не получится.


А чего тогда в заголовке  сообщения D7+WinXP ?

Структур-ы то он держит ? Массив стуктур с полной инфой по процессам, PID/номер etc. В процесс передавай номер в массиве или по ссылке элемент массива.


 
Dot   (2007-08-02 16:57) [6]

>А чего тогда в заголовке  сообщения D7+WinXP
да просто хорошо знаю D7 =) потому если на ней родной код кто нить написал бы, было бы просто разобраться. да и вообще как то специальность дельфянщика

а насчёт структур да, я собственно так и сделал. лучше варианта пока не придумал.


 
Сергей М. ©   (2007-08-03 10:07) [7]


> Dot


А семафоры в FreeBSD присутствуют ?

Если да, то ими будет довольно удобно воспользоваться для реализации приведенной логики.


 
umbra ©   (2007-08-03 11:34) [8]

http://www.lambdacs.com/cpt/FAQ.html#Q10



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
15-1203880153
Аркадий_Т
2008-02-24 22:09
2008.04.06
24 февраля (т.е завтра) рабочий день?


15-1203158175
Ламот
2008-02-16 13:36
2008.04.06
Аудио аппаратура.


2-1204884239
kukuikar
2008-03-07 13:03
2008.04.06
Как перейти в спяций режим програмно (hibernate)


4-1186406447
Yurikon
2007-08-06 17:20
2008.04.06
Как определить заголовок приложения


2-1205494091
Strate
2008-03-14 14:28
2008.04.06
Как определить куда выпадет popup





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский