On Fri, 4 Aug 2000, commedo wrote:

> 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) ?

dari man page-nya tempnam :
        never use this function, use mkstemp(3) instead

> 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.

Mungkin mas commedo bisa melampirkan kode untuk RequestThread di sini ?
Soalnya program dengan mutex rentan terhadap programming error seperti
race condition atau starvation. 

> Kira-kira apa penyebabnya  ? Sebelumnya saya pakai cara yang sama tetapi
> tidak mengakses file dan baik-baik saja.

Sebaiknya dicari dulu fungsi yang menimbulkan segmentation fault.
Satu cara yang sederhana adalah :
        $ gdb <program>
        gdb> run

Nanti akan terlihat : Receiveng SIGSEGV at function ... bla bla bla

-dewa-


--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]

Kirim email ke