LINUX.ORG.RU

posix thread [C]


0

0

Программа должна создать поток и поток должен прервать свое выполнение при i=40.

#include <stdio.h> #include <pthread.h> void *t_f() { int i=0; for(i=0;i<=50;i++){ printf("%d\n",i); if(i==40) pthread_exit(0); } }

int main(void){ pthread_t thr; pthread_create(&thr,NULL,&t_f,NULL); }

При компилировании программы: cc -o pthread ./pthread.c компилятор ругается: /tmp/ccasa4cU.o(.text+0x7a): In function `main': : undefined reference to `pthread_create' collect2: ld returned 1 exit status В чем причина не знаю, только начал разбираться с потоками, help!

anonymous

Re: posix thread [C]


почитайте пожалуйста книжку о многопоточном программировании в среде POSIX, а? очень поможет и продвинет. "Threads Primer - A Guide to Multithreaded Programming" например.

// wbr

klalafuda ★☆☆ ()

Re: posix thread [C]

Вот так вот надо компилировать:
gcc main.c -lpthread

Boost ()
Ответ на: Re: posix thread [C] от Boost

Re: posix thread [C]

> Вот так вот надо компилировать:
> gcc main.c -lpthread

.. ну и еще пачка ошибок, без которых это работать не будет.
все будем разжевывать в очередной раз?
нет уж, пусть лучше книгу почитает.

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: posix thread [C] от klalafuda

Re: posix thread [C]

gcc pthread_e.c -o a.exc -lrt

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>

void *Thread(void *string)
{
while (1)
printf("%s\n", (char *)string);
pthread_exit(NULL);
}

int main()
{
char *e_str = "Hello!";
char *f_str = "Bonjour !";

pthread_t e_th;
pthread_t f_th;

int rc;

rc = pthread_create(&e_th, NULL, Thread, (void *)e_str);
if (rc)
exit(-1);
rc = pthread_create(&f_th, NULL, Thread, (void *)f_str);
if (rc)
exit(-1);
sleep(5);

exit(0);
}

rh9 ()
Ответ на: Re: posix thread [C] от execve

Re: posix thread [C]

> s/pthread_exit(NULL);/return NULL;/

это кстати все равно и завершать поток можно и по выходу из тела и по явному pthread_exit(). оба подхода эквивалентны.

http://www.opengroup.org/onlinepubs/009695399/functions/pthread_exit.html

--- cut ---
RATIONALE

The normal mechanism by which a thread terminates is to return from the routine that was specified in the pthread_create() call that started it. The pthread_exit() function provides the capability for a thread to terminate without requiring a return from the start routine of that thread, thereby providing a function analogous to exit().

Regardless of the method of thread termination, any cancellation cleanup handlers that have been pushed and not yet popped are executed, and the destructors for any existing thread-specific data are executed. This volume of IEEE Std 1003.1-2001 requires that cancellation cleanup handlers be popped and called in order. After all cancellation cleanup handlers have been executed, thread-specific data destructors are called, in an unspecified order, for each item of thread-specific data that exists in the thread. This ordering is necessary because cancellation cleanup handlers may rely on thread-specific data.
--- cut ---

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: posix thread [C] от klalafuda

Re: posix thread [C]

return и pthread_exit в данном случае, разумеется, делают одно и то же, но зачем использовать более сложную конструкцию вместо более простой?

execve ()

Re: posix thread [C]

pthread_create(&thr, NULL, function, NULL); ... pthread_kill(thr,SIG*); printf("end\n"); какой сигнал надо послать процессу thr, что бы он завершил свою работу, а программа , продолжила работу, выполнив printf("end\n"); ?

anonymous ()
Ответ на: Re: posix thread [C] от anonymous

Re: posix thread [C]

pthread_cancel/pthread_testcancel (3).

sf ★★ ()
Ответ на: Re: posix thread [C] от sf

Re: posix thread [C]

Не рекомендую использовать pthread_cancel
Вернее использовать-то можно, но есть проблемы с реализацией
thread cancellation в Linux (точнее в NPTL), да и не только в нем.

Для замены можно использовать условные переменные:
phtread_cond_wait(3)
pthread_cond_signal(3)

romanSA ()
Ответ на: Re: posix thread [C] от romanSA

Re: posix thread [C]

а с _cond вариаблами есть проблема на glibc до 2.3.2 (с бинарной совместимостью) :]. А какие проблемы? (где выражаются)

sf ★★ ()
Ответ на: Re: posix thread [C] от sf

Re: posix thread [C]

Набери в Google:
pthread_cancel phread_join NPTL problem

Фишка в том, что если поток в это время отрабатывает
функции pthread_*, то все проходит отлично, а вот
если попадаем на accept() или select(), то на
join-е можно получить Segmentation fault.


romanSA ()
Ответ на: Re: posix thread [C] от rh9

Re: posix thread [C]

а как в функцию передать 2 и более аргументов ?

anonymous ()
Ответ на: Re: posix thread [C] от anonymous

Re: posix thread [C]

все, разобрался, использовать структуру

anonymous ()
Ответ на: Re: posix thread [C] от romanSA

Re: posix thread [C]

No such article No such article. news.gmane.org/find-root.php?message_id - 1k - Сохранено в кэше - Похожие страницы

Маловато. Правда я еще немного порылся и нифига не нашел на эту тему. А вообще нехер кэнсэлить такой поток :].

sf ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.