Tam Sürümünü Görmek İçin : Thread'lerle ilgili
sadist_sniper
14/12/2004, 21:52
merhaba arkadaşlar. bi program yazıyorum, multithread olacak. C kullanıyorum. Unix bi makina'da çalışıyorum. Bir thread'in, diğer thread'lerin yönetimini yapması gerekiyor. Yani isteğe göre, mesela önce thread1 çalışacak, sonra thread2 çalışacak sonra thread3 çalışacak. Bunlar böyle, bir nevi round robin gibi çalışacak. Hepsinden teker teker iş yapacak. Bunun için nasıl bir yöntem kullanmam lazım? Mesela her thread ekrana 10 kere kendi ismini yazacak diyelim, her thread'in teker teker isim yazmasını istiyorum. Bana önerebileceğiniz bir kaynak ya da bir çözüm yolu var mı? Umarın sorunumu anlatabilmişimdir.
Darkstar
14/12/2004, 22:55
thread'ları fork atarak mı yapmayı planlıyorsun? Zaten unix'te baska yol benim aklıma gelmiyor. main programdan 3 kez fork attırdın mı 3 tane child process'in olur (thread yani). Bunları handle etmek için bir if-else cümleciği yazman lazım... Ayrıntılı bilgi için Unix Programmming isimli bir kitap vardı, yazarı Robert Stevenson'du ama yanlış hatırlıyor olabilirim çok zaman oldu. O kitapta ayrıntısıyla yazıyor bunlar.
sadist_sniper
15/12/2004, 00:29
fork yaparak değil, pthread_create() kullanarak yapmayı planlıyorum... ama thread'leri nasıl kontrol edeceğimi bilmiyorum. mesela her seferinde ayrı thread'ler iş yapsa, iş bittikten sonra o thread'in önceliğini değişmem mümkün olur mu?
acehreli
15/12/2004, 00:43
sadist_sniper, bence de pthread_* ailesine bakmak isine daha yarayacak gibi geliyor. fork butun gorevi (process) kopyalar. Sen ise gorevcik (thread) istedigini soyluyorsun...
Benim bu islevlerle deneyimim yok ama oncelikleri degistirmek icin sanki pthread_attr_setschedparam isine yarayacakmis gibi gorunuyor.
Ali
karamemed
15/12/2004, 08:32
Şurda bişeyler var.
ftp://ftp.cs.hun.edu.tr/pub/dersler/BIL3XX/BIL323-IS-I/0X-04/
sadist_sniper
15/12/2004, 17:50
Bana da pthread_attr_setschedparam daha mantıklı geldi, yardımlarınız için teşekkürler..
sadist_sniper
15/12/2004, 18:52
arkadaşlar kodum şu
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex;
void *thread_f(void *args)
{
int xyz;
xyz=(int)args;
pthread_mutex_lock(&mutex);
if(xyz==1)
printf("\nT1");
else if(xyz==2)
printf("\nT2");
else if(xyz==3)
printf("\nT3");
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
void *scheduler(void *args)
{
int i=0;
int x=1,y=2,z=3;
pthread_t t1,t2,t3;
pthread_attr_t myAttr;
pthread_attr_init(&myAttr);
pthread_attr_setschedpolicy(&myAttr,SCHED_FIFO);
for(i=0;i<10;i++)
{
pthread_create(&t1,&myAttr,thread_f,&x);
pthread_create(&t2,&myAttr,thread_f,&y);
pthread_create(&t3,&myAttr,thread_f,&z);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
pthread_join(t3,NULL);
}
pthread_exit(NULL);
}
main(void)
{
pthread_t thr;
pthread_mutex_init(&mutex,NULL);
pthread_create(&thr,NULL,scheduler,NULL);
pthread_join(thr,NULL);
}
bunun içinde scheduler ve main içindeki pthread_create ve pthread_join'lerde bi problem var sanırım.
problem tam olarak şu
20194421@mail:~> gcc -o lab5 lab5.c
/tmp/ccZ3yRkZ.o: In function `scheduler':
/tmp/ccZ3yRkZ.o(.text+0xf2): undefined reference to `pthread_create'
/tmp/ccZ3yRkZ.o(.text+0x10b): undefined reference to `pthread_create'
/tmp/ccZ3yRkZ.o(.text+0x124): undefined reference to `pthread_create'
/tmp/ccZ3yRkZ.o(.text+0x135): undefined reference to `pthread_join'
/tmp/ccZ3yRkZ.o(.text+0x146): undefined reference to `pthread_join'
/tmp/ccZ3yRkZ.o(.text+0x157): undefined reference to `pthread_join'
/tmp/ccZ3yRkZ.o: In function `main':
/tmp/ccZ3yRkZ.o(.text+0x19e): undefined reference to `pthread_create'
/tmp/ccZ3yRkZ.o(.text+0x1af): undefined reference to `pthread_join'
collect2: ld returned 1 exit status
nedendir acaba? bi fikriniz var mı?
Euclides
15/12/2004, 20:03
gcc -o lab5 lab5.c -lpthread
şeklinde derlemelisin.
eğer math.h'de kullanırsan
gcc -o lab5 lab5.c -lpthread -lm
2..
pthread lib'i tam hatırlamıyorum sanırım join'ide hata kullanmışsın emin değilim ????
şuna bir göz at http://www.advancedlinuxprogramming.com/alp-folder/alp-ch04-threads.pdf
sadist_sniper
15/12/2004, 23:31
ayrıca şunu fark ettim, scheduler içinde ben tekrar pthread_create() kullanarak process yaratamıyorum.. acaba bunun nedeni nedir?
Forum Yazılımı : vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.