This page needs JavaScript activated to work correctly !

This page will be redirect in 3 second !

Race Condition - Networking | IDRaya.com

Race Condition

Triawan NETWORKING 10/10/2020 0 Discuss 2.4K Views

Proses konkuren yang saling berinteraksi memerlukan sinkronisasi agar terkendali serta menghasilkan keluaran sesuai dengan yang diinginkan dan benar. Untuk mencapai hal tersebut maka salah satunya harus dapat menangani race condition yaitu kondisi karena terdapat beberapa proses/thread mengakses shared resources secara bersamaan dan hasil akhirnya ditentukan oleh proses terakhir yang diekekusi.

normal program vs race condition Gambar Program Normal vs Terkena Race Condition.

Pada gambar diatas terlihat contoh studi kasus program producer consumer (penghasil dan pengkonsumsi) dalam mengakses resource yang sama yaitu counter. Program dapat berjalan dengan lancar jika diatur sedemikian rupa dalam mengakses sumber daya counter, dan sebaliknya jika tidak diatur dalam pengaksesannya dapat mengakibatkan race condition.


	int counter = 0;

	//Producer process
	item next_produced;
	while (true) {
	 /* produce an item in next produced */
	   while (counter == BUFFER_SIZE); /* do nothing */
	   buffer[in] = next_produced;
	   in = (in + 1) % BUFFER_SIZE;
	   counter++;
	}

	//Consumer process
	item next_consumed;
	while (true) {
	   while (counter == 0); /* do nothing */
	   next_consumed = buffer[out] ;
	   out = (out + 1) % BUFFER_SIZE;
	   counter--;
	 /* consume the item in next consumed */
	}

Potongan Program Producer Consumer

Pada implementasi kasus producer consumer dalam bentuk potongan program, terlihat resource counter merupakan operand (nilai yang akan digunakan untuk proses operasi) menggunakan unary operator dengan operasi post-increment atau post-decrement sebagai instruksi yang akan ditampilkan terlebih dahulu kemudian akan ditambahkan atau dikurangkan sebagai hasil dari proses program tersebut. Variabel counter akan diinisialisai dengan nilai 0 saat pertama kali program dijalankan, kemudian akan terjadi penambahan 1 nilai pada saat proses producer dijalankan, serta akan terjadi pengurangan 1 nilai pada saat proses consumer dijalankan. Baris kode counter-- atau counter++ merupakan sintaks penulisan yang disingkat, jika dijabarkan atau diimplementasikan akan terlihat sebagai berikut.


	int counter = 0;

	//Producer process (counter++)
	register1 = counter;
	register1 = register1 + 1;
	counter = counter + 1;

	//Consumer process (counter--)
	register2 = counter;
	register2 = register2 – 1;
	counter = register2;

Penjabaran ekspresi post-increment/post-decrement

Jika program producer consumer dijalankan secara konkuren menggunakan interlaving (bergantian), maka hasil nilai counter tidak dapat diprediksi karena ditentukan oleh proses terakhir yang selesai dieksekusi, bisa producer melalui operasi post-increment atau bisa ditentukan oleh consumer melalui operasi post-decrement. Berikut contoh eksekusi dari program producer consumer yang dapat terjadi untuk menggambarkani race condition, dimisalkan counter diinisialisai dengan nilai 5 sebagai awalan.


T0: producer mengeksekusi register1 = counter	   		(register1 = 5)
T1: producer mengeksekusi register1 = register1 + 1	    (register1 = 6)
T2: consumer mengeksekusi register2 = counter	   		(register2 = 5)
T3: consumer mengeksekusi regsiter2 = register2 -1	    (register2 = 4)
T4: producer mengeksekusi counter = register1	   		(counter = 6)
T5: consumer mengeksekusi counter = register2	   		(counter = 4)

Contoh Output Terjadinya Race condition

Terlihat dari beberapa proses diatas dalam mengakses dan memanipulasi data counter secara konkuren dan hasil eksekusinya bergantung pada proses mana yang terakhir di eksekusi. Meskipun hasil akhir dari nilai counter diatas adalah 4, tetapi sangat memungkinkan hasil akhirnya adalah 6, jika T4 dan T5 dibalik.

Seperti yang kita ketahui masalah race condition dapat muncul karena terjadinya proses pengaksesan atau penggunaan sumber daya secara bersama-sama, untuk mencegah hal ini dapat diatasi menggunakan sinkronisasi mutual exclusion, yaitu mekanisme memberikan jaminan bahwa hanya ada satu proses yang dapat mengakses shared resources dalam satu waktu, sementara proses lainnya akan di keluarkan terlebih dahulu. Pada saat proses mengakses atau menggunakan share resource tersebut hal ini dianggap sebagai critical section.

Referensi

  1. Operating Systems: Internals and Design Principles (8th Edition), William Stallings, 2014.
  2. Operating System Concepts (9th Edition in Chinese) by Abraham Silberschatz et al.
  3. The Linux Programming Interface: A Linux and UNIX System Programming Handbook, Michael Kerrisk.

Agus Triawan/Triawan

 matriawan@gmail.com

Triawan is just an ordinary person, founder idraya[dot]com who just a little bit knows also likes try and error about devices, networks and programming/applications to solve challenges related to information technology.

If there is question, please discuss below. Very welcome and expected to provide corrections, criticisms, and suggestions.


We'll not share/display your email.
Example: Say <b>Hello</b> &lt;?php echo 'World'; ?&gt;
Output: Say Hello <?php echo 'World'; ?>
Words can come true for you, so be wise in speaking.

Be the first :D