LINUX.ORG.RU

posix pthreads


0

0

Люди! Работает ли у кого subj под Linux(RH6.1). У меня нет(а во фре работает!). Помогите, если можете.

anonymous

ЭЭЭ незнаю как в RH6.1 а в 6.0 работает и еще как :-))))))
Поконкретнее чего непашет ?

Aleks_IZA
()

пробовал под Slackware 7.1 - все ok
лови сампл
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>

static int run = 1;

void* thread(void* symb)
{
while(run)
{
printf("thread %c\n", symb);
sleep(1);
}
printf("Exit thread %c\n", symb);
return 0;
}

int main(int, char**)
{
pthread_t ttt;
for(int i = 'a'; i <= 'z'; i++)
{
printf(" Creating thread %c\n", i);
pthread_create(&ttt, 0, thread, (void*)i);
sleep(1);
}
run = 0;
sleep(3);
exit(0);
}
это точно работало везде, где запускал

hoopoe ★★
()

мне надо задать область действия конкуренции и состояние отсоединения под FreeBSD я пользуюсь pthread_attr_t attr = PTHREAD_CREATE_JOINABLE | PTHREAD_SCOPE_PROCESS; под linuxom pthread_attr_t attr это не структура а указатель и я не могу задать оба эти параметра

anonymous
()

как понять неструктура ?????
Вы чего !!! ????
pthread_t thr;
pthread_attr_t my_attr;

pthread_attr_init(&my_attr);
pthread_attr_setdetachstate(&my_attr,PTHREAD_CREATE_JOINABLE);


pthread_create(&thr,$my_attr,(void *)funk, (void *)parg);

указатель на структуру ?

Aleks_IZA
()
Ответ на: комментарий от hoopoe

А не надо ли в приведенном примере защищать переменную run mutex'ами? Будет ли вариант без mutex'ов корректно работать на всех платформах?

anonymous
()

нет ненадо !
тоесть он передает не указатель переменной а саму переменныю
(void *) i; а потом перобразует обратно
int=(int) i ;

ну вобщем на 32 разрядах указатель этоо 32 разряда и int тоже 32 разряда
тоесть все OK ! вот ежели так попробовать передать long int IMXO неполучится !


А вот насчет других платформ незнаю тоесть ежели ты собрался проверить
работает ли это на солярке то ставь солярку и смотри как оно ! а еще
лучше с процом на 32 и 64 разряда ! Сделать приладу многоплотформенной
незная как работает другая платформа сложновато !

Aleks_IZA
()
Ответ на: комментарий от Aleks_IZA

2Aleks IZA: Это понятно, но я не о том. Что произойдет если один поток будет изменять значение переменной, а другой в это время ее читать? Я стараюсь исключить такие ситуации, используя mutex'ы. Не зря ли я это делаю? На платформе intel вроде бы все нормально, но что будет на SPARC, Alpha, MIPS? У меня все компьютеры однопроцессорные (процессоры нынче дороги, особенно такие), так что проверить не на чем.

anonymous
()

ой чета я прогнал непомотремши ! про i писал !
>Будет ли вариант без mutex'ов корректно работать на всех платформах?
В примере run используется для киляния всех нитей !!! Поэтому
нетрашно пусть читают из того куда пишется ! ежели run!=0 то exit


Это простой симпл пример но интересный :-)))))
Никто негарантирует что последние thread-ы c символами ... x y z
успеют сделать printf до выхода из процесса exit() ! так как параллельные
процессы да еще thread kernel-level выполняются с разными скоростями да
еще на разных процессорах ! Тут "hoopoe " ставит sleep надеясь что
за время sleep нитка успеет чегонить напечатать !
Поробуй убрать sleep ! и использовать синхронизацию mutex чтобы гарантировать
что каждая нить успеетсделать хотябы раз printf но оставь
возможность thread-ам печатать каждую 1- секунду !
у меня сегодня мозги заняты ! Рисуй сюда посмотрим :-)

Aleks_IZA
()

б ЪБЮЕН ДМС УЙОИТПОЙЪБГЙЙ ЙУРПМШЪПЧБФШ sleep()? рПЮЕНХ ОЕ
pthread_join() ? рТПУФП ОХЦЕО ВХДЕФ НБУУЙЧ РПФПЛПЧ.

kelyar ★★★★★
()

Я хотел сказать, что для синхронизации завершения процессов вроде удобнее пользоваться pthread_join(), чем sleep(). Просто придется хранить еще массив pthread_t.

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