RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Ответить на сообщение
Имя:
e-mail:
FIDO:
Home page:
сохранить данные о вас
Тема:
> Вероятно, я пургу сказал в самом начале - про реентерабельность. Как я понимаю, никакая на самом деле это не реентеребельность. Просто библиотеки отчего-то по жизни хотят статические данные (да хоть для той же 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; > } >
_, _, _,
/ \ (_ / ~ )
\ / , ) / /
~ ~ ~~~
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.