![Page 1: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/1.jpg)
Sinkronisasi Proses
Pertemuan ke 6
![Page 2: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/2.jpg)
Agenda Hari ini
Masalah Critical Section
Masalah Klasik dalam Sinkronisasi
Semaphores
Latar Belakang
![Page 3: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/3.jpg)
Bersyukur dan berdoaMenurut kepercayaan dan agama masing-masing
(1) Bersyukur masih diberi kesempatan untuk belajar dan berbagi ilmu.
![Page 4: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/4.jpg)
Bersyukur dan berdoaMenurut kepercayaan dan agama masing-masing
(1) Bersyukur masih diberi kesempatan untuk belajar dan berbagi ilmu.
(2) Berdoa, semoga ilmu yang didapat hari ini dapat mudah terserap dengan tetap menjaga sopan satun.
![Page 5: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/5.jpg)
Bersyukur dan berdoaMenurut kepercayaan dan agama masing-masing
(1) Bersyukur masih diberi kesempatan untuk belajar dan berbagi ilmu.
(2) Berdoa, semoga ilmu yang didapat hari ini dapat mudah terserap dengan tetap menjaga sopan satun.
(3)Berdoa, semoga bisa menyelesaikan pendidikan ini tepat waktu dan diwaktu yang tepat
![Page 6: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/6.jpg)
LATAR BELAKANG
![Page 7: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/7.jpg)
LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke
data yang sama, dapat menyebabkan data menjadi tidak konsisten
Untuk menjaga agar data tetap konsisten, dibutuhkan mekanisme-mekanisme untuk memastikan pemintaan ekseskusi dari proses yang bekerja.
Sinkronisasi merupakan “issue” penting dalam rancangan/implementasi OS (shared resources, data, dan multitasking).
Salah satu masalah yang dapat timbul bila tidak menerapkan sinkronisasi adalah Race Condition
![Page 8: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/8.jpg)
Race Condition
※ Race Condition: Situasi yang tidak menentu akibat beberapa proses mengakses dan memanipulasi data secara bersamaan.
※ Nilai terakhir dari data bergantung dari proses mana yang selesai terakhir.
※ Untuk menghindari Race Condition, proses-proses secara bersamaan harus disinkronisasikan.
※ Contoh : Proses Transfer Uang
![Page 9: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/9.jpg)
Critical Section Problem
![Page 10: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/10.jpg)
Critical Section Problem• Sebagai gambaran, sebuah sistem mempunyai n
proses yang saling berbagi data.• Setiap proses punya segmen kode yang disebut
critical section, dimana shared data diakses.• Contoh : ketika producer/consumer mengakses
variabel counter.• Masalah : ketika satu proses menjalankan critical
section-nya, di saat bersamaan process lain tidak boleh mengakses critical-section-nya
![Page 11: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/11.jpg)
Solusi Critical Section Problem• Mutual Exclusion. Jika proses Pi mengekseskusi
critical section nya, maka tidak ada proses lain yang dapat mengeksekusi critical section nya.
• Progress. Jika tidak ada proses yang mengeksekusi critical section nya dan terdapat beberapa proses yang akan memasuki critical section, maka pemilihan proses yang akan memasuki critical section berikutnya tidak dapat ditunda tanpa batas
• Bounded Waiting. Ada batasan waktu tunggu ketika proses diizinkan untuk memasuki critical section setelah proses membuat permintaan untuk memasuki crit ical section dan sebelum permintaan yang diberikan.
![Page 12: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/12.jpg)
Mutual Exclusion• Mutual exclusion (mutex) adalah metode yang
digunakan untuk mencegah terjadinya inkonsitensi data sebagai akibat dari race condition.
• Untuk lebih mudah memahami mutex dan race condition, perhatikan kode berikut
![Page 13: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/13.jpg)
Mutual Exclusion
1. Sintaks #include<pthread.h> pada baris ke-5 adalah file header untuk mengakses POSIX thread library.
2. Baris 24 pthread_create() digunakan untuk membuat thread baru.
3. Function tambah pada baris ke 10 s/d 19 adalah aktifitas dari thread yang barusan dibuat atau thread T0.
4. Baris 33 yaitu pthread_join() digunakan untuk menunggu thread T0 selesai dieksekusi.
5. Ada variable global bernama bilangan yang awalnya bernilai nol (0).
6. Baris 26 s/d 31 variabel bilangan ditambah satu sampai bilangan bernilai 20.
7. Baris 12 s/d 17 variabel bilangan juga ditambah satu sampai bilangan bernilai 20.
8. Jadi seharusnya variable bilangan bernilai 40. Tetapi mengapa saat dieksekusi variable bilangan hanya bernilai 20 ?
![Page 14: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/14.jpg)
Mutual ExclusionHasil Compile :
Mengapa variable bilangan tidak berjumlah 40 (karena ada 2 buahperulangan FOR LOOP sebanyak 40x) tetapi hanya 20 ?Karena penggunaan thread tersebut secara tidak aman/benar sehingga hasilnya sulit diprediksi. Thread 1 dan thread 2 saling berebut menggunakan variable BILANGAN sehingga hasil akhirnya (BILANGAN) menjadi sulit diprediksi. Kondisi ini disebut RACE CONDITION. Supaya hasilnya benar yaitu bilangan = 40 maka salah satu caranya adalah menggunakan MUTEX.
![Page 15: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/15.jpg)
Mutual ExclusionPada kasus kita, critical section adalah variable BILANGAN, maka untuk mencegah proses/thread berebutan hak akses terhadap variable BILANGAN (critical section) maka kita harus mengatur hak akses tersebut menggunakan mutex.Untuk melindungi bagian critical section terhadap hasil yang tidak dapat diprediksi maka harus digunakan mutex lock seperti ini:
pthread_mutex_t a_lock = PTHREAD_MUTEX_INITIALIZER;
![Page 16: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/16.jpg)
Mutual Exclusion
![Page 17: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/17.jpg)
Mutual ExclusionHasil Compile :
![Page 18: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/18.jpg)
Masalah Klasik Sinkronisasi
![Page 19: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/19.jpg)
Permasalahan Klasik dalam Sinkronisasi
• Ada beberapa permasalahan klasik dalam sinkronisasi– Permasalahan Bounded-Buffer– Permasalahan Dining-Philosophers– Permasalahan Readers and Writers
![Page 20: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/20.jpg)
Bounded-BufferBounded-buffer Producer Consumer• Producer : memproduksi data dan dimasukkan ke
buffer• Consumer : Mengonsumsi/mengambil data dari
buffer• Kapasitas buffer dibatasi• Ada variabel counter pencatat jumlah data
sekarang. Counter bernilai awal 0 yang bertambah ketika data diproduksi dan berkurang jika data dikonsumsi
![Page 21: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/21.jpg)
Bounded-BufferProducer (P)
Costumer (C)
![Page 22: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/22.jpg)
Bounded-Buffer• Q : Jika counter = 5, berapa nilai counter setelah satu kali iterasi secara
concurrent ?
• counter++ dapat diimplementasikan dalam bahasa mesin sbb :– register1 = counter– register1 = register1 + 1– counter = register1
• counter-- dapat diimplementasikan dalam bahasa mesin sbb :– register2 = counter– register2 = register2 - 1– count = register2
![Page 23: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/23.jpg)
Bounded-Buffer• Jika “counter = 5” dan producer-consumer dieksekusi secara concurrent maka urutan eksekusinya bisa jadi :
1. Producer eksekusi : register1 = counter {register1 = 5}2. Producer eksekusi : register1 = register1 + 1 {register1 = 6}3. Consumer eksekusi : register2 = counter {register2 = 5}4. Consumer eksekusi : register2 = register2 - 1 {register2 = 4}5. Producer eksekusi : counter = register1 {counter = 6 }6. Consumer eksekusi : counter = register2 {counter = 4}
• Nilai counter dapat bernilai 4 atau 6. Padahal seharusnya 5• Problem : race condition
![Page 24: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/24.jpg)
Problem Dining Philosopers• Pada tahun 1965, Djikstra menyelesaikan
sebuah masalah sinkronisasi yang beliau sebut dengan dining philisophers problem.
• Dining philosophers dapat diuraikan sebagai berikut :
• Lima orang filosuf duduk mengelilingi sebuah meja bundar. Masing-masing filosof mempunyai sepiring sphagetti. Sphagetti-sphagetti tersebut sangat licin dan membutuhkan dua sumpit untuk memakannya. Diantara sepiring spageti terdapat satu sumpit.
![Page 25: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/25.jpg)
Problem Dining Philosopers
![Page 26: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/26.jpg)
Problem Dining Philosopers• Kehidupan para filosof terdiri dari tiga periode, yaitu berpikir,
lapar dan makan. • Ketika seorang filosof lapar, dia berusaha untuk mendapatkan
sumpit kiri dan sumpit kanan sekaligus. • Dia mengambil sumpitnya satu per satu. Begitu ia mendapat
sebuah sumpit, ia tidak akan melepaskannya. Jika ia hanya berhasil mengambil kurang dari 2 sumpit, maka ia akan menunggu sampai 2 sumpit diambil.
• Begitu dia mendapatkan 2 sumpit, maka dia akan makan mienya untuk sementara waktu dan kemudian meletakkan kedua sumpitnya.
• Kedua sumpit ini kemudian dapat digunakan oleh filusuf-filusuf yang lain.
![Page 27: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/27.jpg)
Problem Dining Philosopers• Pertanyaan kuncinya adalah, dapatkah masing-masing
philosophers tersebut melakukan prosesnya dengan benar dan tidak pernah mengalami kebuntuan. ada dua masalah yang di hadapi dining philosopher yaitu:
1. Deadlock 2. Starvation Philosopher i:
do {
wait(chopstick[i])
wait(chopstick[(i+1) % 5])
… eat
…
signal(chopstick[i]);
signal(chopstick[(i+1) % 5]);
… think
…
} while (1);
![Page 28: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/28.jpg)
Problem Dining Philosopers• Solusi yang dilakukan adalah:
– Membolehkan max 4 filosof yang secara bersamaan duduk di meja makan
– Membolehkan filosof mengambil sumpit jika kedua sumpit tersedia
– Menggunakan penyelesaian asimetris. Filosof ganjil mengambil sumpit di kirinya baru kemudian yang kanan. Sementara filosof genap dengan cara sebaliknya.
![Page 29: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/29.jpg)
Permasalahan Readers and Writers
• TUGAS– Jelaskan mengenai Permasalahan Readers
and Writers– Jelaskan apa masalahnya ?– Bagaimana solusinya ?– Solusi boleh dituliskan dalam bentuk
algoritma• Kerjakan di kertas A4
![Page 30: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/30.jpg)
Semaphore
![Page 31: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/31.jpg)
Semaphore
• Semaphore adalah counter atau penanda yang digunakan mengatur sinkronisasi saat proses atau thread sedang berbagi sumber daya yang sama pada saat yang sama.
• Semaphore memiliki 2 buah operasi :– Operasi Wait (nama lainnya: P (Proberen) atau Down atau Lock)– Operasi Signal (nama lainya: V (Verhogen) atau Up atau Unlock
atau Post)
![Page 32: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/32.jpg)
Semaphore
Cara Kerja :
• Saat Wait maka nilai counter berkurang 1. Jika counter bernilai negative maka proses/thread ini akan dipaksa berhenti (sleep). Proses/thread yang diberi operasi Wait akan dipaksa berhenti sampai proses/thread tersebut diberi tanda Signal. Jadi kalo counter lebih kecil dari 0 maka akan proses/thread akan diblok.
• Saat Signal maka nilai counter bertambah 1. Proses/thread yang diberi operasi/tanda Signal akan running dan harus berhenti jika diberi tanda Wait. Kalo proses/thread lebih besar atau sama dengan nol maka akan running (unblock)
![Page 33: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/33.jpg)
Semaphore
Contoh kasus 1 menjelaskan bagaimana cara menggunakan semaphore untuk melakukan sinkronisasi antar proses. Anggap ada 2 proses yaitu Proses A dan Proses B, dimana kedua proses men-berbagi sumber daya yang sama (variable bilangan). Jika tidak dilakukan sinkronisasi antara proses maka nilai variable bilangan menjadi tidak pasti (tidak stabil), misalnya: berapa nilai variable bilangan pada Gambar di bawah ini ?? Bilangan = 20 atau 40 ??
![Page 34: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/34.jpg)
Semaphorejika program di atas diimplementasi TANPA MENGGUNAKAN SEMAPHORE maka hasilnya tampak seperti Gambar di bawah ini
SEKARANG DICOBA MENGGUNAKAN SEMAPHORE !!!Dengan menggunakan semaphore maka anda dapat mengatur thread mana yang harus running terlebih dahulu sehingga kedua thread tidak berebutan menggunakan variable bilangan. Gambar sebelumnya dimodifikasi dengan menambahkan semaphore, hasilnya seperti gambar di bawah ini.
![Page 35: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/35.jpg)
Semaphore
SEKARANG DICOBA MENGGUNAKAN SEMAPHORE !!!
Dengan menggunakan semaphore maka anda dapat mengatur thread mana yang harus running terlebih dahulu sehingga kedua thread tidak berebutan menggunakan variable bilangan. Gambar sebelumnya dimodifikasi dengan menambahkan semaphore, hasilnya seperti gambar di bawah ini.
![Page 36: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/36.jpg)
Semaphore
Pada kasus ini, thread A & B mengetahui adanya semaphore "afandi" dan mau diatur oleh semaphore afandi. Mula-mula B akan dipaksa berhenti karena ada operasi Wait (nilai afandi yang awalnya bernilai nol akan dikurangi 1 sehingga = -1) sedangkan thread A langsung bekerja. Saat thread A selesai maka Sinyal(&afandi) akan membuat nilai "afandi" sama dengan 0 karena Sinyal membuat counter "afandi" bertambah 1 (sebelumnya bernilai -1). Setelah afandi bernilai 0, maka thread B akan bekerja.
Pada gambar, semaphore yang bernama "afandi" di inisial isasi (INIT(&afandi, 0) dengan memberi nilai nol. Semaphore "afandi" ini dishare antara kedua thread. Artinya thread A & B sama2 mengetahui semaphore ini dan penggunaannya.
PENTING !!!: Semaphore harus dishare diantara proses/thread yang terlibat dalam komunikasi kalo tidak maka anda tidak dapat melakukan sinkronisasi antar proses/thread tersebut
![Page 37: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/37.jpg)
implementasi semaphore#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<pthread.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <string.h>
int bilangan = 0; // VARIABEL GLOBAL YANG DISHARE BERSAMA ANTARA
// THREAD 1 DAN THREAD TAMBAH
pthread_t T0;
int afandi; /* variabel semaphore */
// FUNCTION DARI SEMAPHORE
void sem_p(int id, int value){ // untuk ganti nilai semaphore dengan -1 atau 1
struct sembuf sem_b;
int v;
sem_b.sem_num = 0;
sem_b.sem_op = -1; /* P() */
sem_b.sem_flg = SEM_UNDO;
if (semop(id, &sem_b, 1) == 1)
fprintf(stderr, "\nError...Semaphore P Decrement Gagal");
}
![Page 38: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/38.jpg)
void sem_v(int id, int value){ // untuk ganti nilai semaphore dengan -1 atau 1
struct sembuf sem_b;
int v;
sem_b.sem_num = 0;
sem_b.sem_op = 1; /* V() */
sem_b.sem_flg = SEM_UNDO;
if(semop(id, &sem_b, 1) == -1)
fprintf(stderr, "\nError...Semaphore V Increment Gagal");
}
void sem_create(int semid, int initval){
int semval;
union semun {
int val;
struct semid_ds *buf;
unsigned short *array;
} s;
s.val = initval;
if((semval = semctl(semid, 0, SETVAL, s)) < 0)
fprintf(stderr,"\nsemctl error....");
}
void sem_wait(int id){ // Decrement P
int value = -1;
sem_p(id, value);
}
void sem_signal(int id){ // Increment V
int value = 1;
sem_v(id, value);
}
// END FUNCTION SEMAPHORE
![Page 39: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/39.jpg)
// THREAD
void *tambah(void *a) {
int i,j;
sem_wait(yosua);
for (i = 0; i < 20; i++) {
j = bilangan;
j++;
sleep(1);
bilangan = j;
}
return NULL;
}
int main() {
int i,j;
printf("Nilai Bilangan Awal = %i\n", bilangan);
// BUAT SEMAPHORE "afandi"
if((yosua = semget(IPC_PRIVATE, 1, 0666|IPC_CREAT)) == -1){
printf("\nError... Tidak bisa buat semaphore afandi");
exit(1);
}
sem_create(afandi, 0);
if(pthread_create(&T0, NULL, tambah, NULL)==-1)
error("thread tidak bisa dibuat");
// THREAD INI YANG RUNNING DULUAN KEMUDIAN THREAD TAMBAH
for ( i=0; i<20; i++) {
j = bilangan;
j++;
sleep(1);
bilangan = j;
}
sem_signal(afandi);void* result;pthread_join(T0, &result);printf("Nilai Bilangan Akhir = %i\n", bilangan);return 0;}
![Page 40: Sinkronisasi Prosesafandi.dosen.ittelkom-pwt.ac.id/wp-content/uploads/sites/... · 2017-12-05 · LATAR BELAKANG Akses-akses yang dilakukan secara bersama-sama ke data yang sama,](https://reader036.vdocuments.pub/reader036/viewer/2022062414/5d1c163088c993fc268c6b12/html5/thumbnails/40.jpg)