Thready na Unixie

Hej, jaki jest odpowiednik funkcji _beginthread na systemy Unixopodobne?

Próbowałem bawić się z pthread, ale nie do końca o to mi chodziło…

Ale pthreads to właśnie podstawowa biblioteka do wątków w systemach Unix(-like). Do utworzenia wątku jest pthread_create. Owszem, możesz użyć jakieś innej biblioteki, ale i tak będzie to tylko nakładka na pthreads. Możesz się zainteresować np. wątkami w Glib.

Tak, ale po użyciu pthread_create i pthread_join, wątek niby się tworzy ale nie działa tak samo jak na Windowsie.

Tzn. Mam funkcje abc() wewnątrz której tworze wątek. Funkcje abc() wywołuje z funkcji main(), i niby wszystko co miało się wykonać w funkcji abc, wykonuje się ale za to nie wykonuje się to co w funkcji main jest za funkcją abc, dopóki wątek nie przestanie “pracować”…

Pokaż kod, który sprawia Ci problemy.

Przykład:

void *thread(void*)

{

while(true)

{

cout<<"Jestem watkiem!"<
//wazne rzeczy

}

}


void abc()

{

//dowolny kod

pthread_t t;

pthread_create(&t,NULL,thread,NULL);

pthread_join(t,NULL);

//dowolny kod

}


int main()

{

cout<<"Ble ble ble"<
abc();

cout<<"Test"<
return 0;

}

Tak jak podejrzewałem - join. Robi dokładnie to co ma robić: http://pubs.opengroup.org/onlinepubs/00 … _join.html

Wstrzymuje wykonanie głównego wątku (z funkcji main) dopóki nie zostanie zakończony wątek “t”. Czyli powrót z abc() następuje po zakończeniu wykonywania wątku t, a ten sam nigdy się nie zatrzyma… zgodnie z tym co otrzymujesz.

Kurr… cze…

Więc mam użyć jedynie funkcji pthread_create?

Zapewne chcesz użyć pthread_join, zapewne później (jeśli np. w którymś miejscu musisz mieć wyniki obliczeń z innych wątków). Tyle, że wywołując join zaraz po create nie dajesz możliwości wątkowi wywołującemu działać dopóki nie zakończy się ten wątek. To już zależy jakie operacje wykonują te wątki i ogólnie jak chcesz zorganizować ich pracę.

PS Jeśli interesują Cię nakładki na pthreads to pierwsze przychodzą mi na myśl Glib Threads ( http://developer.gnome.org/glib/2.28/glib-Threads.html ) i Boost.Thread ( http://www.boost.org/doc/libs/1_46_1/do … hread.html )

Nie rozumiesz, ja wcale nie potrzebuje używać join. Użyłem go ponieważ było we wszystkich tutorialach :lol:

Anyway, już sobie poradziłem. Dzięki :stuck_out_tongue: Następnym razem przejże dokumentacje zanim założę wątek.