On Sun, 2005-02-13 at 03:30 +0700, durung_lulus wrote: > Wah-wah. > mas2 dan bapak2 ternyata hebat2 ilmu c/c++ nya > klo ngoding make c/c++ emang ga ngebosenin sih, sayang > urusan perut slalu jadi gang buntu..... > Tapi thx deh, berkat komen2nya, jadi semangat lagi > ngelanjutin blajar c++ nya. > > Ada satu pertanyaan lagi nih, gimana caranya buat ngontrol > thread biar bisa jalan barengan. Saya coba bikin 2 thread, > tapi slalu saja thread yg kedua ketinggalan jalannya dan > ga bisa bener2 berjalan secara bergantian? > Saya bisa paksa jalan bergantian make condition variable, > tapi hasilnya menjadi lebih lambat. > > thx before.
Hmm... saya agak kurang ngerti maksudnya... terutama masalah thread yang ketinggalan jalannya... tapi saya coba jelaskan menurut pengetahuan saya.. Thread itu dimaksudkan bukan untuk berjalan secara simultan bersamaan, tapi sebenarnya maksud utama dari thread adalah membuat beberapa proses yang bisa berjalan independen tanpa menunggu proses yang lain selesai... Contoh, mungkin pernah mengalami menggunakan program2 DOS waktu jaman DOS dulu, kalo kita misalkan, menjalankan program Lotus, kemudian kita mau menjalankan program Wordstar, maka kita harus menunggu program Lotus selesai dulu - dalam hal ini keluar dari program Lotus - baru kemudian kita bisa menjalankan program Wordstar... Oke... contoh tersebut memang bukan contoh yang baik untuk multithreading, sebenarnya hal itu disebut dengan multitasking, tapi hal itu dapat menggambarkan kejadian dimana kita membutuhkan beberapa proses yang berjalan secara independen, dan kita tidak menginginkan proses kedua menunggu sampai proses pertama selesai... Di dalam OS modern macam Windows, MacOS, *NIX, dan Linux, maka konsep multithreading ini mutlak diperlukan, karena kita tidak mungkin mau sementara kita sedang melakukan printing, word prosesor kita harus menunggu sampai seluruh halaman tercetak, baru kita bisa melanjutkan mengetik... tentunya hal ini yang terjadi pada program lama seperti Wordstar dahulu... Nah... dari konsep itulah, sebuah thread intinya bukanlah berjalan secara simultan bersamaan dalam waktu yang bersamaan pula, namun ketergantungan antar proses itulah yang ingin dihilangkan... Pada kenyataannya, sebuah prosesor hanyalah bisa menjalankan sebuah perintah pada satu saat, jadi sebuah OS haruslah memiliki komponen yang disebut dengan "scheduler" yang bertugas untuk membagi 'giliran' prosesor untuk menjalankan masing2 thread menurut timeslice-nya... Yah... gampangannya, kita memakan roti isi coklat, keju, dan strawberry, secara bersamaan, daripada menunggu roti coklat selesai baru keju dimakan, kita mengigit bergantian segigit demi segigit dari coklat-keju-strawberry-coklat-keju-strawberry... dst, sampai ketiga roti tersebut habis... memang secara waktu, untuk memakan ketiganya lebih lama... tapi sebelum roti coklat habis, kita sudah bisa merasakan rasa roti keju dan strawberry... itu intinya... Nah masalah apakah dua thread bisa menghasilkan kerja bergantian seperti A-B-A-B-A-B-A-B dst, bergantung pada 'scheduler' OS, karena pembagian timeslice dilakukan untuk satuan per 'instruction code' prosesor, jadi belum tentu sebuah thread mendapatkan timeslice-nya pas pada saat kita bisa mencetak ke layar... mungkin Anda memprogram dalam assembly, dimana satu perintah misal: printf, harus dilakukan melalui beberapa 'instruction code'-nya prosesor... Jadi harapan untuk kedua thread bisa selesai bersamaan tidaklah bisa terjadi 100%, kecuali melalui proses sinkronisasi antar kedua thread, dan lagi, itu berarti, kedua thread adalah saling dependant, dan sebaiknya penyelesaiannya adalah tidak menggunakan thread sama sekali, tapi menggunakan looping bergantian... Semoga membantu... -- Danny Kurniawan -----BEGIN GEEK CODE BLOCK----- Version: 3.12 GCS/CM/E/IT d+() s+:+ a- C++>+++$ UL+++(++)>++++ P!(+++) L+++>++++>$ E-- W++>$ N o-- K- w--(+++) O++@ M@ V? PS PE-@ Y+ PGP@ t++ 5+@ X+++(++) R tv+ b +++(++) DI? D++@ G+>++ e++ h- r++ y z- ------END GEEK CODE BLOCK------ -- Berhenti langganan: [EMAIL PROTECTED] Arsip dan info: http://linux.or.id/milis.php
