Matakuliah : KONSEP BAHASA PEMROGRAMAN Tahun : 2010 KONKURENSI Pertemuan 10 Outline Materi •Pendahuluan •Konkurensi aras subprogram •Semaphore •Monitor •Message Passing •Java Thread •C# Thread Bina Nusantara University 3 Pendahuluan • Aslinya digunakan di SO tetapi sekarang juga digunakan di bahasa pemrograman • Diawali di PL/I dan sekarang juga di Ada 95, Java dan C# • Konkurensi dapat terjadi di empat aras : – – – – Aras instruksi mesin Aras pernyataan bahasa high-level Aras unit Aras program • Karena tidak ada isu instruksi di aras mesin dan aras program, keduanya tidak dibahas di sini Bina Nusantara University 4 Arsitektur Komputer • Akhir 1950-an: satu prosesor general-purpose dan satu atau lebih prosesor khusus untuk operasi I/O • Awal 1960-an: prosesor multipel utuh untuk konkurensi aras program • Pertengahan 1960an: prosesor multiple partial untuk konkurensi aras instruksi • Mesin SIMD : Single-Instruction Multiple-Data • Mesin MIMD : Multiple-Instruction Multiple-Data , prosesor independen yang dapat disinkronisasi untuk konkurensi aras unit Bina Nusantara University 5 Kategori Konkurensi • Thread of control adalah sekuen titik program yang dilalui oleh alir kendali yang melalui program • Kategori konkurensi : – Physical concurrency - multiple independent processors ( multiple threads of control) – Logical concurrency – kemunculan fisik konkurensi disajikan oleh time-sharing one processor (software dapat didesain seperti halnya ada multiple threads of control) • Coroutines (quasi-concurrency) mempunyai thread of control tunggal Bina Nusantara University 6 Konkurensi Aras Subprogram • Task atau process adalah unit program yang eksekusinya bisa konkuren dengan unit program lain • Task berbeda dari subprogram biasa dalam hal – Task dimulai secara implisit – Jika unit program memulai eksekusi task, ia tak perlu di-suspend – Jika eksekusi task selesai kendali mungkin tidak kembali ke pemanggil • Task biasanya bekerja bersama-sama Bina Nusantara University 7 Kategori Task • Heavyweight tasks eksekusi didalam ruangnya sendiri dan mempunyai run-time stack sendiri • Lightweight tasks semuanya dieksekusi di ruang yang sama dan menggunakan run-time stack yang sama • Task disjoint jika ia tidak berkomunikasi dengan atau mempengaruhi task lain dalam program dengan cara apapun • Task communication melalui : shared non-locals, parameters, dan message passing. • Form of communication: sinkronkan eksekusinya, shared data atau keduanya. • Komunikasi digunakan untuk sinkronisasi . Bina Nusantara University 8 Sinkronisasi Task • Mekanisme yang mengendalikan urutan task yang dieksekusi • Dibutuhkan jika task sharing data • Dua tipe sinkronisasi – Cooperation synchronization: Task A harus menunggu task B untuk menyelesaikan eksekusinya sebelum task A melanjutkan eksekusinya untuk mencegah buffer overflow dan/atau underflow , e.g., masalah producer-consumer – Competition synchronization: dua atau lebih task harus menggunakan beberapa sumber yang tidak dapat digunakan secara simultan untuk mencegah dua task mengakses shared data pada saat yang sama. • Kompetisi biasanya disediakan dengan mutually exclusive access Bina Nusantara University i.e. semaphores, monitors dan message passing 9 Sinkronisasi Kompetisi Bina Nusantara University 10 Scheduler • Sinkronisasi memerlukan mekanisme untuk menunda eksekusi task • Pengendalian eksekusi task dikelola oleh program yang disebut scheduler, yang memetakan eksekusi task ke prosesor yang tersedia Bina Nusantara University 11 State Task • New – dibentuk tetapi belum dimulai • Runnable atau ready – siap di-run tetapi belum running (tak ada prosesor tersedia) • Running • Blocked – sedang running, tetapi tidak dapat lanjut (biasanya menunggu munculnya event) • Dead – tidak aktif lagi Bina Nusantara University 12 Liveness dan Deadlock • Liveness adalah karakterstik yang dipunyai unit program atau tidak dipunyai • Dalam kode sekuensial, berarti unit akan menyelesaikan eksekusinya • Di lingkungan konkurensi, task mudah kehilangan liveness-nya • Jika semua tasks dalam lingkungan konkurensinya kehilangan liveness-nya, disebut deadlock Bina Nusantara University 13 Isu Desain • Sinkronisasi Kompetisi atau Kooperasi • Metode sinkronisasi – Semaphore – Monitor – Message Passing • Pengendalian penjadwalan task • Bagaimana dan kapan eksekusi tasks mulai dan berakhir Bina Nusantara University 14 Semaphore • Dijkstra – 1965 • Semaphore adalah struktur data yang terdiri dari konter dan queue untuk menyimpan dekriptor task yaitu menyimpan semua informasi tentang state tasks • Semaphore dapat digunakan untuk implementasi guards untuk mengakses shared data structures • Guard adalah alat yang mengijinkan guarded code dieksekusi dengan kondisi tertentu yaitu hanya satu task yang dapat mengakses shared data pada suatu waktu • Semaphore hanya mempunyhai dua operasi, wait dan release , aslinya disebut P dan V oleh Dijkstra • Semaphore dapat digunakan untuk menfasilitasi competition dan cooperation synchronization Bina Nusantara University 15 Sinkronisasi Kooperasi Semaphore • Contoh: shared buffer • Buffer diimplementasikan sebagai TDA dengan operasi DEPOSIT dan FETCH sebagai jalan untuk mengakses buffer • Gunakan dua semaphore untuk kooperasi: emptyspots dan fullspots • Konter semaphore digunakan untuk menyimpan banyak empty spots dan full spots dalam buffer • Emptyspots semaphore menyebabkan producer diqueued untuk menunggu adanya ruang kosong jika ia penuh sedangkan fullspots semaphore menyebabkan consumer di-queued untuk menunggu dientri jika ia kosong Bina Nusantara University 16 Sinkronisasi Kooperasi Semaphore (lanjutan) • DEPOSIT pertama harus mencek emptyspots untuk melihat jika ada ruang di buffer • Jika ada ruang, konter emptyspots dikurangi dan nilai dimasukkan • Jika tak ada ruang, caller disimpan di queue emptyspots • Ketika DEPOSIT selesai, ia harus menaikkan konter fullspots Bina Nusantara University 17 Sinkronisasi Kooperasi Semaphore (lanjutan) • FETCH pertama harus mencek fullspots untuk melihat jika ada nilai – Jika full spot, konter fullspots diturunkan dan nilainya dipindahkan – Jika tak ada nilai dalam buffer, caller harus diletakan di queue fullspots – Jika FETCH selesai, ia menaikkan konter emptyspots • Operasi FETCH dan DEPOSIT di semaphore dilaksanakan melalui operasi wait dan release Bina Nusantara University 18 Operasi wait dan release wait(aSemaphore) if aSemaphore’s counter > 0 then decrement aSemaphore’s counter else put the caller in aSemaphore’s queue attempt to transfer control to a ready task -- if the task ready queue is empty, -- deadlock occurs end release(aSemaphore) if aSemaphore’s queue is empty then increment aSemaphore’s counter else put the calling task in the task ready queue transfer control to a task from aSemaphore’s queue end Bina Nusantara University 19 Kode producer-consumer semaphore fullspots, emptyspots; fullstops.count = 0; emptyspots.count = BUFLEN; task producer; loop -- produce VALUE –wait (emptyspots); {wait for space} DEPOSIT(VALUE); release(fullspots); {increase filled} end loop; end producer; Bina Nusantara University 20 Kode producer-consumer task consumer; loop wait (fullspots);{wait till not empty}} FETCH(VALUE); release(emptyspots); {increase empty} -- consume VALUE –end loop; end consumer; Bina Nusantara University 21 Sinkronisasi Kompetisi Semaphore • Semaphore ketiga, access, digunakan untuk mengendalikan akses (sinkronisasi kompetisi) – Konter access hanya mempunyai dua nilai 0 dan 1 – Semaphore seperti ini disebut binary semaphore • Catatan bahwa wait dan release harus atomik Bina Nusantara University 22 Kode producer-consumer semaphore access, fullspots, emptyspots; access.count = 0; fullstops.count = 0; emptyspots.count = BUFLEN; task producer; loop -- produce VALUE –wait(emptyspots); {wait for space} wait(access); {wait for access) DEPOSIT(VALUE); release(access); {relinquish access} release(fullspots); {increase filled} end loop; end producer; Bina Nusantara University 23 Kode producer-consumer task consumer; loop wait(fullspots);{wait till not empty} wait(access); {wait for access} FETCH(VALUE); release(access); {relinquish access} release(emptyspots); {increase empty} -- consume VALUE –end loop; end consumer; Bina Nusantara University 24 Evaluasi Semaphore • Un-save linkungan pemrograman • Salahguna semaphore dapat menyebabkan gagalnya sinkronisasi koooperasi, e.g., buffer akan overflow jika wait of fullspots dan/atau emptyspots left out dan deadlock jika kita tinggalkan release • Salahguna semaphore dapat menyebabkan gagalnya sinkronisasi kompetisi, e.g., program akan deadlock jika release of access di tasks ditinggalkan dan akses tak aman jika meninggalkan wait (access) Bina Nusantara University 25 Monitor • • • • • • • Concurrent Pascal, Modula, Mesa, Ada, Java, C# Dinamai oleh Hoare (1974) TDA adalah solusi masalah semaphore Ide: kapsulkan shared data dan operasinya untuk membatasi akses dan menyembunyikan representasi Monitor adalah TDA untuk shared data Semua sinkronisasi pada shared data digabungkan dalam satu unit program (Dijkstra, 1971) Concurrent Pascal – Bahasa pertama yang mengimplementasikan monitor – Wirth’s Pascal + class (dariSimula 67) + process (=task) + monitor Bina Nusantara University 26 Monitor (lanjutan) • Proses – Sintaks mirip prosedur tetapi semantik berbeda – Semua proses adalah tipe • type process_name = process (formal parameters) local declaration process body • end – Pernyataan init harus digunakan untuk alokasi lokal untuk memulai eksekusi • init process_var_name (actual parameter) Bina Nusantara University 27 Monitor (lanjutan) • Bentuk umum – type monitor_name = monitor (formal parameter) • • • • Declarations of shared data Definition of local procedure Definition of exported procedure Initialization code – end • Pernyataan init digunakan untuk membentuk instance monitor • Lifetime : mulai dengan init, berakhir bersama program • Lingkup: dibatasi pada monitor Bina Nusantara University 28 Sinkronisasi Kompetisi dan Kooperasi • Sinkronisasi kompetisi, shared data menetap di monitor bukannya di unit klien – Implementasi monitor menjamin akses disinkronisasi dengan hanya mengijinkan satu akses pada suatu waktu – Pemanggilan prosedur monitor secara implisit di- queue jika monitor sibuk saat dipanggil • Sinkronisasi kooperasi tetap merupakan tugas pemrograman; pemrogram harus menjamin bahwa shared buffer tidak underflow atau overflow Bina Nusantara University 29 Evaluasi Monitor • Cara yang lebih baik untuk meyediakan sinkronisasi kompetisi daripada semaphore • Semaphore dapat diigunakan untuk implementasi monitor, sebaliknya monitor juga dapat digunakan untuk implementasi semaphore • Dukungan kepada sinkronisasi kooperasi sangat mirip dengan semaphore, sehingga ia mempunyai masalah yang sama Bina Nusantara University 30 Message Passing • Monitor aman di memori tunggal; di sistem terdistribusi dicapai melalui message passing (MP) • Dipelopori oleh Brinch Hansen (1978) dan Hoare (1978) • Basis pada guarded command (Dijkstra, 1975) • Message passing adalah model umum untuk konkurensi – Dapat menjadi model untuk semaphore dan monitor – Tidak hanya untuk sinkronisasi kompetisi • Ide dasar: komunikasi task seperti mengunjungi dokter— sebagian besar waktu ia menunggu anda atau anda menunggunya tetapi saat keduanya siap anda bersamanya atau rendezvous Bina Nusantara University 31 Fundamental • Task kerap sibuk sehingga tidak ingin diinterupsi • Task dapat ditunda karena – Idel, atau – Butuh informasi dari yang lain • Jika task A ingin mengirim pesan ke B, dan B mau menerimanya, pesan dapat dikirim. Transmisi aktual disebut rendezvous • Message menyebabkan – Proses di penerima tidak sensible jika proses lain incomplete, atau – Menyediakan mekanisme untuk menspesifikasi yang lain jika is siap menerima Bina Nusantara University 32 MP Rendezvous • Mekanisme yang mengindikasikan bahwa task siap menerima pesan • Task perlu cara mengingat siapa yang menunggu untuk menerima pesannya dan beberapa cara lain untuk memilih pesan berikutnya • Jika pesan diterima oleh penerima task, transmisi pesan aktual disebut rendezvous Bina Nusantara University 33 Konkurensi di Ada • Ada 83 model MP – Bentuk task mirip package – Ada task mempunyai bagian spesifikasi dan body, keduanya dengan nama yang sama; spesifikasi mempunyai interface, yaitu koleksi titik masuk untuk menerima pesan – Titik masuk mungkin mempunyai parameter karena pesan dapat berparameter task Task_Example is entry ENTRY_1 (Item : in Integer); end Task_Example; Bina Nusantara University 34 Task Body • body task menguraikan aksi yang terjadi ketika rendezvous muncul • Task yang mengirim pesan di-suspend sambil menunggu pesan diterima dan selama rendezvous • Titik masuk di spek di diuraikan dengan klausa accept dalam body accept entry_name (formal parameters) do … end entry_name Bina Nusantara University 35 Contoh Task Body task body TASK_EXAMPLE is begin loop accept ENTRY_1 (ITEM: in FLOAT) do ... end ENTRY_1; end loop; end TASK_EXAMPLE; Bina Nusantara University 36 Semantik MP Ada • task mengeksekusi klausa accept dan menunggu pesan • Selama eksekusi klausa accept , sender di- suspend • Parameter accept dapat mengirim informasi ke satu arah atau dua arah • Setiap klausa accept beraosiasi dengan queue untuk menyimpan waiting messages Bina Nusantara University 37 Rendezvous Time Lines Bina Nusantara University 38 Server/Actor Task MP • Task yang mempunyhai klausa accept tetapi tidak mempunyai kode lain disebut server task (contoh diatas adalah server task) • Task tanpa klausa accept disebut actor task – Actor task dapat mengirim pesan ke task lain – Catatan, pengirim harus tahu nama entry penerima tetapi tidak sebaliknya Bina Nusantara University 39 Contoh Actor Task task WATER_MONITOR; -- specification task body WATER_MONITOR is -- body begin loop if WATER_LEVEL > MAX_LEVEL then SOUND_ALARM; end if; delay 1.0; -- No further execution -- for at least 1 second end loop; Bina Nusantara University 40 Titik Masuk Multiple • Task dapat mempunyai lebih dari satu titik masuk – Bagian specification task mempunyai klausa entry untuk setiap klausa entri – Bagian task body mempunyai klausa accept untuk setiap klausa entry , diletakkan di klausa select yang berada di loop Bina Nusantara University 41 Task dengan Multiple Entri task body TASK_EXAMPLE is loop select accept ENTRY_1 (formal params) do ... end ENTRY_1; ... or accept ENTRY_2 (formal params) do ... end ENTRY_2; ... end select; end loop; end TASK_EXAMPLE; Bina Nusantara University 42 Semantik Task dengan klausa select • Jika satu entry queue tidak kosong pilih pesan darinya • Jika lebih dari satu entry queue tidak kosong, pilih satu, nondeterministically, untuk menerima pesan • Jika semua kosong, wait • Konstruksi disebut selective wait • Perluasan klausa accept – kode mengikuti klausa tetapi sebelum klausa berikut – Dieksekusi konkuren dengan caller Bina Nusantara University 43 Sinkronisasi Kooperasi dengan MP • Disediakan oleh klausa guarded accept when not FULL(BUFFER) => accept DEPOSIT (NEW_VALUE) do • Klausa accept dengan klausa when yang mungkin open atau closed – Klausa yang guard-nya true disebut open – Klausa yang guard-nya false disebut closed – Klausa tanpa guard selalu open Bina Nusantara University 44 Semantik select dengan guard accept • select pertama mencek guard semua klausa • Jika satu buka, queue-nya dicek untuk pesan • Jika lebih dari satu buka, pilih satu secara nondeterministik untuk mencek pesan • Jika semua tutup, runtime error • Klausa select dapat memuat klausa else untuk menghindari eror; • jika klausa else selesai, ulangi loop Bina Nusantara University 45 Task dengan guard accept task GAS_STATION_ATTENDANT is entry SERVICE_ISLAND (CAR : CAR_TYPE); entry GARAGE (CAR : CAR_TYPE); end GAS_STATION_ATTENDANT; Bina Nusantara University 46 Contoh Task dengan guarad accept task body GAS_STATION_ATTENDANT is begin loop select when GAS_AVAILABLE => accept SERVICE_ISLAND (CAR : CAR_TYPE) do FILL_WITH_GAS (CAR); end SERVICE_ISLAND; or when GARAGE_AVAILABLE => accept GARAGE (CAR : CAR_TYPE) do FIX (CAR); end GARAGE; else SLEEP; end select; end loop; end GAS_STATION_ATTENDANT; Bina Nusantara University 47 Sinkronisasi Kompetisi dengan MP • • • • Model akses mutually exclusive ke shared data Contoh -- shared buffer Kapsulkan buffer dan operasinya dalam task Sinkronisasi kompetisi implisit dalam semantik klausa accept – Hanya satu klausa accept dalam task dapat aktif pada suatu waktu Bina Nusantara University 48 Terminasi Task • Eksekusi task completed jika kendali mencapai akhir kode body • Jika task tidak membentuk dependent task dan ia completed, ia terminated • Jika task membentuk dependent tasks dan completed, ia tidak terminated sampai semua dependent task-nya terminated Bina Nusantara University 49 Klausa terminate • Klausa terminate dalam select tidak lain adalah pernyataan terminate • Klausa terminate dipilih ketika tak ada klausa accept buka • Jika terminate dipilih dalam task, task terminated hanya jika master-nya dan semua dependents masternya completed atau waiting di terminate • Block atau subprogram is not left sampai semua dependent task-nya terminated Bina Nusantara University 50 MP priority • Prioritas sembarang task dapat di-set dengan pragma priority pragma Priority (expression); • Prioritas task dipakai hanya jika ia ada didalam task ready queue Bina Nusantara University 51 Konkurensi di Ada 95 • Ada 95 memuat fitur konkurensi Ada 83 ditambah dua fitur baru – Protected objects: cara yang lebih efisien untuk implementasi shared data agar akses ke shared data dapat dilakukan tanpa rendezvous – Komunikasi asynchronous Bina Nusantara University 52 Protected Object dan Komunikasi Asynchronous • Protected Object – Mirip dengan TDA – Akses ke protected object bisa melalui pesan yang dikirim ke entries, atau melalui protected subprograms – Protected procedure menyediakan akses read-write yang mutually exclusive ke protected objects – Protected function menyediakan akses read-only ke protected objects • Komunikasi asynchronous – Disediakan melalui struktur asynchronous select – asynchronous select mempunyai dua alternatif, klausa entry atau delay • Klausa entry di-trigger ketika mengirim pesan • Klausa delay di-trigger ketika waktu batas dicapai Bina Nusantara University 53 Evaluasi MP Ada • Model konkurensi MP powerful dan umum • Protected objects adalah cara yang lebih baik untuk sinkronisasi shared data • Jika tak ada prosesor terdistribusi , pilihan antara monitor dan task dengan MP adalah soal selera • Untuk sistem terdistribusi , MP adalah model yang lebih baik Bina Nusantara University 54 Java Thread • Unit konkurensi di Java adalah metode dengan nama run – Metode run eksekusinya dapat konkuren dengan metode serupa – Proses dimana metode run dieksekusi disebut thread Class myThread extends Thread public void run () {…} } … Thread myTh = new MyThread (); myTh.start(); • Dukungan Java pada konkurensi relatif sederhana tetapi efektif meskipun tidak se-powerful task Ada 55 Bina Nusantara University Pengendalian Thread • Klas Thread mempuyai sejumlah cara untuk mengkontrol eksekusi thread-nya – Metode yield adalah request dari running thread untuk menghentikan prosesor secara sukarela – Metode sleep dapat digunakan oleh pemanggil metode untuk menblok thread – Metode join digunakan untuk memaksa metode menunda eksekusinya sampai metode run thread lain selesai eksekusinya Bina Nusantara University 56 Prioritras Thread • Nilai default prioritas thread adalah sama dengan thread yang membentuknya – Jika main membentuk , prioritas default-nya adalah NORM_PRIORITY • Thread mendefinisikan dua prioritas konstan lain, MAX_PRIORITY dan MIN_PRIORITY • Prioritas thread dapat diubah dengan metode setPriority Bina Nusantara University 57 Sinkronisasi Kompetisi dengan Java Thread • Metode yang memuat modifier synchronized tidak membolehkan metode lain running pada object selama eksekusinya … public synchrnoized void deposit( int i) {…} public synchrnoized int fetch() {…} … • Dua metode diatas adalah synchrnoized yang mencegahnya saling interfensisatu sama lain r • Jika hanya sebagian metode harus di-run tanpa intervensi, ia dapat disinkronisasi melalui pernyataan synchrnoized Synchrnoized (expression) statement Bina Nusantara University 58 Sinkronisasi Kooperasi dengan Java Thread • Sinkronisasi kooperasi di Java dicapai melalui metode wait, notify, dan notifyAll – Semua metode didefine dalam Object, yaitu root class di Java, sehingga semua obyek mewarisinya • Metode wait harus dipanggil dalam loop • Metode notify dipanggil untuk mengatakan kepada seseorang menunggu thread yang event-nya sedang menunggu apa ang kan terjadi • Meode notifyAll memabngunkan semua threads pada daftar tunggu obyek Bina Nusantara University 59 C# Thread • Berbasiskan pada Java tetapi berbeda signifikan • Operasi dasar – Sembarang metode dapat run dalam thread-nya – Thread dibentuk dengan meng-creat Thread object – Pembentukan thread tidak menjalankan eksekusi konkurensinya; ia harus diminta melalui metode Start – Thread dapat dibuat untuk menunggu thread lain agar selesai dengan Join – Thread dapat di-suspend dengan Sleep – Thread dapat diakhiri dengan Abort Bina Nusantara University 60 Sinkronisasi C# Thread • Tiga cara untuk mensinkronkan C# thread – Class Interlock : digunakan jika operasi yang dibutuhkan untuk sinkronisasi adalah menaikkan atau menurunkan bilangan bulat – Pernyataan lock : digunakan untuk menandai bagian kode kritis dalam thread lock (expression) {… } – Class Monitor : menyediakan empat metode yang dapat digunakan untuk sinkronisasi yang lebih rumit • Lebih maju daripada Java thread, karena metode dapat run di thread-nya sendiri, terminasi thread lebih jelas dan sinkronisasi lebih baik Bina Nusantara University 61 LATIHAN A. SOAL PILIHAN 1. Dua karakteristik dasar yang disediakan oleh bahasa dengan concurrency adalah a. mutually exclusive access, cooperation among task b. mutually inclusive access, cooperation among task c. mutually exclusive access, competition among task d. mutually exclusive access, competition among task 2.Yang dimaksud dengan coroutine tidak lain adalah a. physical concurrency b. logical concurrency c. quasi concurrency d. structural concurrency 3. Producer-consumer problem yang awalnya dikembangkan di OS adalah contoh dari a. physical concurrency b. logical concurrency c. cooperation synchronization d. competition synchronization Bina Nusantara University 62 LATIHAN 4. Mutually exclusive access pada shared data diperlukan untuk menjamin terjadinya a. physical concurrency b. logical concurrency c. cooperation synchronization d. competition synchronization 5. Salah satu karakteristik task yang membedakannya dengan (ordinary) subprogram adalah a. task dan subprogram keduanya dieksekusi secara explicit b. task dan subprogram keduanya dieksekusi secara implicit c. task dieksekusi secara implicit dan subprogram dieksekusi secara explicit d. task dieksekusi secara explicit dan subprogram dieksekusi secara implicit Bina Nusantara University 63 LATIHAN B. SOAL URAIAN 1. Ada tiga alternatif untuk menjawab isu desain concurrency yaitu semaphore, monitor dan message passing. Jelaskan apa yang kamu ketahui tentang tiga terminologi tersebut. 2. Definisikan konsep tentang rendezvous, accept clause, entry clause, actor task, server task, dan completed task. Bina Nusantara University 64 Ringkasan • Eksekusi konkurensi dapat terjadi di aras instruksi, pernyataan atau subprogram • Konkurensi fisik: ketika prosesor multipel digunakan untuk mengeksekusi unit konkuren • Konkurensi logikal: konkuren dieksekusi dalam satu prosesor • Dua fasilitas dasar untuk mendukung konmkurensi subprogram: competition synchronization dan cooperation synchronization • Mekanisme : semaphores, monitors, MP Bina Nusantara University 65
© Copyright 2024 Paperzz