PDA

Tam Sürümünü Görmek İçin : Thread oluşturma süresi


futi
27/10/2007, 11:28
Merhaba arkadaşlar. 100 tane thread oluşturucam ve her bir threadin oluşturulma süresini hesaplıcam. Ve ortalama bir değer çıkartıcam. Şu şekilde bir kod denedim fakat her bir threadin oluşturulma süresi olarak 0ms üretiyor.


#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_OF_THREADS 100

float gecensureler[100];

void *YAZ(void *threadid)
{
int *id_ptr, taskid;
id_ptr = (int *) threadid;
taskid = *id_ptr;
printf("Thread %d: %s\n", taskid, gecensureler[taskid]);
pthread_exit(NULL);
}

int main()
{
int rc,i;
int *taskids[NUM_OF_THREADS];
pthread_t threads[NUM_OF_THREADS];
float gecensureler[100];

clock_t now=0;
now=clock();


for(i=0; i<NUM_OF_THREADS; i++)
{
taskids[i] = (int *) malloc(sizeof(int));
*taskids[i] = i;
clock_t now=0;
now=clock(); //simdiki zamani now, degiskenine attik
rc=pthread_create(&threads[i],NULL,YAZ,(void *)taskids[i]);
gecensureler[i]=(clock()-now);
printf("GecenSure %d => %f\n",i,gecensureler[i]);
}
float m=(clock()-now);
printf("%f mm \n",clock());
pthread_exit(NULL);
}


acaba öneriniz nedir? ne yapmak lazım?
(bu ödevi process ile thread oluşturmadaki geçen süre arasındaki farkı bulmak için yapıoruz.)

tşkler


Euclides
27/10/2007, 13:26
(bu ödevi process ile thread oluşturmadaki geçen süre arasındaki farkı bulmak için yapıoruz.)

Açıkcası pthread ile ilgilenmiyorum, kodunuda okumadım. pthread kullanmandan linux'de denediğini düşünüyorum. Fakat şöyle bir durum var, linux'de thread-process ayrımı pek yok. Senin kullandığın pthread'da dahil olmak üzere herkes clone() kullanıyor, bu fonkisyon ise yeni bir process yaratıyor. clone()'un fork()'dan farkı ise nelerin shared olabileceğini seçebilmen.
Google'da bir arama yaparsan konu hakkında daha fazla döküman bulabilirsin

acehreli
28/10/2007, 06:45
Ben bu konunun uzmani sayilmam ama...

1) Olcmeye calistigin sey pthread_create'in sana geri dOnme suresi mi, YAZ'in calismaya baslamasi mi, yoksa YAZ'in isini bitirmesi mi?

main icerisinde pthread_create'in sana dOnme suresini olcuyorsun. Bu cok kisa bir sure olabilir.

2) YAZ'in icinde kullanilan gecensureler ile main'in icindeki gecensureler birbirlerinden ayri seyler. YAZ herhalde global bir gecensureler'in degerini yaziyor. O da bastan beri hep sifir.

3) clock'in dOnUs degeri fazla hassas degildir. Saniye'nin CLOCKS_PER_SEC'te biri kadar hassaslikla olcer. Mikrosaniye hassaslik yeterliyse gettimeofday islevi kullanilabilir. Ortalikta nanosaniye hassaslikla olcen islevler de var ama ben hatirlamiyorum.

Ali