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

 
 
> POSIX pthread_* в Linux, когда появилось и как реализовано?
Johny
сообщение Nov 5 2006, 19:04
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 140
Регистрация: 18-10-05
Пользователь №: 9 792



В большинстве книг по Linux не упоминается Posix thread library - вызовы с префиксом pthread_ (типа pthread_create()). Однако я встречал упоминание, что в последних версиях Linux это реализовано. Начиная с какой версии? Это отдельная библиотека, или набор системных вызовов? В каком хедере описаны?
Как обстоят дела с многопоточностью в других uCLinux и других embedded ОСях?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Johny
сообщение Oct 24 2007, 16:08
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 140
Регистрация: 18-10-05
Пользователь №: 9 792



Не стал открывать новую тему.

Возникла такая проблема:

я использую функции завершения потока, устанавливаемые макросом
pthread_cleanup_push
поток останавливается функцией
pthread_cancel

На PXA-255, ядро 2.4.19 компилятор gcc 3.3 все работает хорошо.

На Писюке с Ubuntu 7.04 компилятор gcc 4.1.2 (Ubuntu 4.1.2 - Qubuntu4) функции завершения потока, описанного в C - файле вызываются нормально. А вот функции завершения потока, описанного в CPP - файле не вызываются.

В чем может быть дело?
Go to the top of the page
 
+Quote Post
Olej
сообщение Oct 24 2007, 16:24
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(Johny @ Oct 24 2007, 19:08) *
я использую функции завершения потока, устанавливаемые макросом
pthread_cleanup_push

... я надеюсь он закрывается макросом pthread_cleanup_pop ? wink.gif

Цитата(Johny @ Oct 24 2007, 19:08) *
поток останавливается функцией
pthread_cancel

На PXA-255, ядро 2.4.19 компилятор gcc 3.3 все работает хорошо.

На Писюке с Ubuntu 7.04 компилятор gcc 4.1.2 (Ubuntu 4.1.2 - Qubuntu4) функции завершения потока, описанного в C - файле вызываются нормально. А вот функции завершения потока, описанного в CPP - файле не вызываются.

В чем может быть дело?

В ошибках в коде sad.gif ... например неправильной передаче pthread_cleanup_push адреса процедуры завершения, а ещё скорее - для неё параметров... кстати, функция потока в этом случае не должна завершаться pthread_cancel(), а должна pthread_cleanup_pop( 1 )...
Механизм pthread_cleanup_... , стека процедур завершения - нормально работает не только в GCC с соответствующим libstd 4.х, 3.х - но и 2.95.х ...

Ищите ошибку wink.gif
Точнее можно только по коду сказать.
Go to the top of the page
 
+Quote Post
Johny
сообщение Oct 30 2007, 06:08
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 140
Регистрация: 18-10-05
Пользователь №: 9 792



Цитата(Olej @ Oct 24 2007, 19:24) *
... я надеюсь он закрывается макросом pthread_cleanup_pop ? wink.gif
В ошибках в коде sad.gif ... например неправильной передаче pthread_cleanup_push адреса процедуры завершения, а ещё скорее - для неё параметров... кстати, функция потока в этом случае не должна завершаться pthread_cancel(), а должна pthread_cleanup_pop( 1 )...
Механизм pthread_cleanup_... , стека процедур завершения - нормально работает не только в GCC с соответствующим libstd 4.х, 3.х - но и 2.95.х ...

Ищите ошибку wink.gif
Точнее можно только по коду сказать.


pthread_cleanup_pop конечно же стоит - без него код не компилируется.

Код функции потока очень простой, в чем может быть ошибка - непонятно (чтобы нормально работало на писюке ввел флаг MesureRunning, для остановки потока вместо вызова pthread_cancel, сбрасываю флаг. Если не объявлять LINUX_PC, на писюке функция DestroyMesurer все равне не вызывается, и как следствие объект класса CImpMesurer не дестроится ).


#ifdef LINUX_PC
static int MesureRunning = 0;
extern "C" void* MesureProc (void* param);
#else
extern "C" static void* MesureProc (void* param);
extern "C" static void DestroyMesurer(void* Mesurer);
#endif

/*...Код других функций...*/

extern "C" void* MesureProc(void* param)
{
bool res;
int ret;
double RP, RM, RZ;
CImpMesurer* Mesurer;
MesureThreadPar *ThrParam = (MesureThreadPar*) param;
void ( *ReceiveImpedance)(void* ID, double RP, double RM, double RZ, int res);

void* ID = ThrParam->ID;
ReceiveImpedance = ThrParam->ReceiveImpedance;

free(ThrParam);

Mesurer = new CImpMesurer();

#ifdef LINUX_PC
while(MesureRunning==1)
#else
pthread_cleanup_push(&DestroyMesurer,(void*)Mesurer); /* add termination handler*/

while(1)
#endif
{
pthread_testcancel(); /* Tect cancel thread */
res=Mesurer->Mesure(&RP, &RM, &RZ); /* impedance mesure */
ret=res?0:1;
ReceiveImpedance(ID, RP, RM, RZ, ret); /*call call-back function*/
}
#ifndef LINUX_PC
pthread_cleanup_pop (1);
#else
delete Mesurer;
#endif
return NULL;
}

#ifndef LINUX_PC
extern "C" void DestroyMesurer(void* Mesurer)
{
delete (CImpMesurer*) Mesurer;
#ifdef DEBUG_
errout = fopen("/tmp/AudioAPIErr", "a");
fprintf(errout, "DestroyMesurer()\n");
fclose(errout);
#endif
}
#endif //LINUX_PC
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Johny   POSIX pthread_* в Linux   Nov 5 2006, 19:04
- - Harbour   появилось в 1996 (имплементация Xavier Leroy), нач...   Nov 6 2006, 06:30
|- - Johny   Цитата(Harbour @ Nov 6 2006, 09:30) появи...   Nov 7 2006, 17:35
||- - KirillS   Цитата(Johny @ Nov 7 2006, 19:35) Цитата(...   Nov 10 2006, 16:02
|- - Olej   Цитата(Harbour @ Nov 6 2006, 07:30) Много...   Jan 19 2007, 21:43
|- - Harbour   Цитата(Olej @ Jan 19 2007, 20:43) Цитата(...   Jan 20 2007, 12:57
- - v_shamaev   Цитата(Johny @ Nov 5 2006, 22:04) Как обс...   Nov 6 2006, 06:43
|- - AlexandrY   Процессы и потоки выдумка Linux-а. Там процессы н...   Jan 18 2007, 18:02
|- - v_shamaev   Цитата(AlexandrY @ Jan 18 2007, 18:02) Пр...   Jan 18 2007, 20:24
|- - Harbour   Цитата(AlexandrY @ Jan 18 2007, 17:02) Пр...   Jan 19 2007, 10:03
|- - Olej   Зесь уже очень верно заметили раньше: Цитата(Alexa...   Jan 22 2007, 11:55
- - Harbour   В ядре 2.6 появился TLS и соответствующая поддержк...   Nov 8 2006, 06:47
|- - Playnet   Цитата(Harbour @ Nov 8 2006, 06:47) Кстат...   Jan 18 2007, 16:20
- - nazim   ЦитатаВ большинстве книг по Linux не упоминается P...   Jan 18 2007, 23:53
|- - sff   Цитата(nazim @ Jan 18 2007, 23:53) Можно ...   Jan 19 2007, 01:11
|- - makc   Цитата(sff @ Jan 19 2007, 01:11) А точнее...   Jan 19 2007, 10:23
|- - sff   2 makc Извеняюсь, что наврал.. хоть и появились k...   Jan 19 2007, 11:28
|- - makc   Цитата(sff @ Jan 19 2007, 11:28) 2 makc И...   Jan 19 2007, 12:00
|- - v_shamaev   Цитата(makc @ Jan 19 2007, 12:00) Думаю, ...   Jan 19 2007, 12:40
|- - makc   Цитата(v_shamaev @ Jan 19 2007, 12:40) Ци...   Jan 19 2007, 12:46
||- - v_shamaev   Цитата(makc @ Jan 19 2007, 12:46) Цитата(...   Jan 19 2007, 14:56
||- - makc   Цитата(v_shamaev @ Jan 19 2007, 14:56) Хо...   Jan 19 2007, 15:04
|- - Playnet   Цитата(v_shamaev @ Jan 19 2007, 12:40) Ци...   Jan 19 2007, 19:30
- - InvisibleFed   Имеется книженция "Unix. Взаимодействие проце...   Jan 20 2007, 14:07
|- - makc   Цитата(InvisibleFed @ Jan 20 2007, 14:07)...   Jan 20 2007, 14:12
- - beer_warrior   ЦитатаЕсли программу предназначенную для работы на...   Jan 20 2007, 18:30
|- - makc   Цитата(beer_warrior @ Jan 20 2007, 18:30)...   Jan 20 2007, 18:36
|- - Harbour   Цитата(beer_warrior @ Jan 20 2007, 17:30)...   Jan 21 2007, 09:51
- - InvisibleFed   Книжку на днях постараюсь залить. Сообщу. Цитата...   Jan 21 2007, 04:52
- - InvisibleFed   ЦитатаРаботать такое приложение будет тоже медленн...   Jan 21 2007, 11:37
|- - makc   Цитата(InvisibleFed @ Jan 21 2007, 11:37)...   Jan 21 2007, 12:03
- - InvisibleFed   Я про 2.4. О тредах знает ТОЛЬКО процесс. Ядро о н...   Jan 21 2007, 14:07
|- - makc   Цитата(InvisibleFed @ Jan 21 2007, 14:07)...   Jan 21 2007, 14:25
||- - Johny   Цитата(makc @ Jan 21 2007, 18:25) Кроме т...   Jul 4 2007, 17:39
|- - Olej   Цитата(InvisibleFed @ Jan 21 2007, 12:37)...   Jan 21 2007, 21:26
- - path_finder   Кстати, раз пошла такая пьянка, может подскажет кт...   Jan 21 2007, 23:35
|- - Olej   Цитата(path_finder @ Jan 22 2007, 00:35) ...   Jan 22 2007, 01:06
- - Harbour   Здесь путаницу вносит видимо несколько реализаций ...   Jan 22 2007, 09:38
- - InvisibleFed   ЦитатаИз POSIX определения уже понятно, что именн...   Jan 22 2007, 10:53
|- - Olej   Цитата(InvisibleFed @ Jan 22 2007, 11:53)...   Jan 22 2007, 11:15
|- - Harbour   Цитата(InvisibleFed @ Jan 22 2007, 09:53)...   Jan 23 2007, 10:02
- - InvisibleFed   ЦитатаВ нормальной реализации потоков (я не знаю, ...   Jan 23 2007, 05:17
|- - Olej   Цитата(InvisibleFed @ Jan 23 2007, 06:17)...   Jan 23 2007, 11:36
- - InvisibleFed   Цитатаэтой книжке в прошлую пятницу 10 лет исполни...   Jan 23 2007, 13:34
- - Olej   Цитата(Johny @ Oct 30 2007, 09:08) pthrea...   Oct 31 2007, 13:50
- - Johny   Цитата(Olej @ Oct 31 2007, 16:50) P.S. к...   Nov 2 2007, 08:59


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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 01:11
Рейтинг@Mail.ru


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