RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Вопрос по Си (нитки) (ps)


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : saa
To : saa
Subj : Вопрос по Си (нитки) (ps)

Вероятно, я пургу сказал в самом начале - про реентерабельность. Как я понимаю, никакая на самом деле это не реентеребельность. Просто библиотеки отчего-то по жизни хотят статические данные (да хоть для той же itoa). Поэтому эти данные нужно размещать для каждой нити при её создании. То есть библиотеки фактически остаются нереентерабельными, просто они работают каждая в контексте своей нити. Вообще-то об этом в доках написано.

Правда, я всё же вызовы типа ctime() обычно рассемафориваю сам. Не верю я им.

А результат замены clib/st на clib/mt я так и не заметил. Обычно оно даже одинаковый exe'шник давало. (Watcom V.10)

[re: 6083 (to joseph)]
> Я всегда пользуюсь DosCreateThread
я тоже пользовался. пока не порезался...

[re: 6085 (to Igor Saveliev)]
> А должно было сработать ИМХО.
= Ну почему же? Ведь данные из ParamList считываются не при запуске нити (т.е. до завершения DosCreateThread/_beginthread), а уже самой нитью, асинхронно, т.е. потом. А потом суп с другим котом, данные изменились, и та нить получает все шансы считать данные, которые уже не её предназначены. Можно поиграться с понижением приоритетов создаваемых нитей, и тогда видно, что вариант "только(2)" сразу выдает лажу.

Имеет смысл делать так:
---main ---
paramtype *param = new paramtype;
param.data=data;
_beginthread (th_function,0,8192,(void*)param);
------
void th_function (void *param_v)
{
paramtype *param=param_v;
data=param.data;
delete paramtype;
}


Mon 03 Dec 2001 18:39 Mozilla/2.02 (X11; I)




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.