Bagaimana untuk menciptakan thread sebanyak n buah sekaligus dan setiap
thread tersebut akan membuat sebuah file dengan nama unik (pake fungsi
tempnam) dan pake pthread_mutex untuk tempnam tersebut (mencegah
dihasilkannya nama sama) ?
Saya sudah membuat sebuah program yang membuat thread sebanyak n buah dengan
algoritma sbb :
for (j=0; j<nThread; j++)
{
i++;
//printf("Before get el\n");
el = (*ResultQ)[i];
printf("[i=%d, j=%d] Retrieving : %s\n", i, j, el.content[0]);
iRetCode = pthread_create(&aThreadReqId[j], NULL, RequestThread,
(void*) strdup(el.content[0]));
if (iRetCode == 0)
{
printf("Thread-%d ID = %d created\n", j, aThreadReqId[j]);
}
else printf("Error create thread !!!\n");
}
for (j=0; j<nThread; j++)
{
printf("Joining %d -> Thread ID = %d\n", j, aThreadReqId[j]);
iRetCode = pthread_join(aThreadReqId[j], &Retval);
if (iRetCode == 0)
printf("Thread-%d ID = %d join\n", j, aThreadReqId[j]);
}
else printf("Error joining thread !!!\n");
}
Fungsi RequestThread tersebut berisi rutin sebagaimana telah saya sebutkan
sebelumnya. Program tersebut selalu mengalami kegagalan, segmentation fault.
Untuk kasus nThread = 1, tidak ada masalah. Sedangkan untuk nThread > 1,
maka akan mengalami kegagalan. Kegagalan tersebut adalah ketika thread ke-2
dibuat, thread ke-1 seolah-olah tidak berfungsi. Setelah thread ke-2 exit,
kegagalan terjadi. Kemungkinan pada saat eksekusi pthread_join terjadi
kegagalan dikarenakan thread ke-1 yang tidak tahu kenapa tidak berfungsi
sebagai mana mestinya.
Kira-kira apa penyebabnya ? Sebelumnya saya pakai cara yang sama tetapi
tidak mengakses file dan baik-baik saja.
Terima kasih.
Slamet
e-mail : [EMAIL PROTECTED]
[EMAIL PROTECTED]
home : http://www.commedo.com
--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]