Anda di halaman 1dari 22

BUILDING H2O

Makalah ini disusun untuk memenuhi tugas dari mata kuliah Sistem Operasi

DOSEN PENGAMPU
Juanda Hakim Lubis, ST. M.Kom

DISUSUN OLEH
Almeranda Haryaveda 0701212141
Bintang Hutagalung 0701212149
Emir Syarif Machfudz 0701212049
Rara Fazira 0701212175

SEMESTER/KELAS
IV/IK-5

PROGRAM STUDI ILMU KOMPUTER


FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS ISLAM NEGERI SUMATERA UTARA
MEDAN
2023
KATA PENGANTAR

Puji dan syukur kami panjatkan kehadirat Allah SWT. Yang telah
melimpahkan rahmat dan karunia-Nya, sehingga kami dapat menyelesaikan
makalah yang berguna untuk memenuhi tugas mata kuliah Sistem Operasi. Selain
itu, makalah ini bertujuan untuk menambah wawasan mahasiswa tentang
bagaimana mengimplementasikan program building h20 ke praktek dengan
menggunakan komputer.
Makalah ini kami tulis dari hasil penyusunan data-data yang kami peroleh
dari website universitas, jurnal ilmiah dan e-book. Kami berharap dengan adanya
makalah ini dapat menyadarkan para mahasiswa untuk lebih maju, mempelajari dan
menerapkannya di dalam kehidupan sehari-hari. Dalam penyusunan makalah ini
kami menyadari bahwa makalah ini jauh dari kata sempurna, untuk itu bagi para
pembaca dimohon untuk memberikan saran dan kritik yang membangun motivasi
agar kedepannya lebih baik lagi dalam proses pembuatan makalah.
Kami selaku penulis mengucapkan terima kasih kepada Bapak Juanda
Hakim, ST. M.Kom selaku dosen mata kuliah Sistem Operasi, maupun kepada
pihak lain yang telah membaca dan memahami makalah ini dengan seksama.

Medan, 06 Juni 2021

Penulis

i
DAFTAR ISI

KATA PENGANTAR ............................................................................................. i

DAFTAR ISI .......................................................................................................... ii

BAB I PENDAHULUAN ...................................................................................... 1

1.1 Latar Belakang ........................................................................................ 1

1.2 Rumusan Masalah .................................................................................. 2

1.3 Tujuan ...................................................................................................... 2

BAB II PEMBAHASAN ....................................................................................... 3

2.1 Latar Belakang Hydrogen Dan Oksigen ............................................... 3

2.2 Permasalahan Building H2O ................................................................. 5

2.3 Penyelesaian Permasalahan Building H2O .......................................... 7

2.4 Solusi Dalam Bentuk Program Bahasa C# Dan Program Semaphore


Dari Permasalahan Building H2O ........................................................ 8

BAB III PENUTUP ............................................................................................. 16

3.1 Kesimpulan ............................................................................................ 16

DAFTAR PUSTAKA........................................................................................... 17

ii
BAB I PENDAHULUAN

1.1 Latar Belakang


Kehidupan manusia sangat bergantung pada akses yang memadai
terhadap air bersih. Namun, tantangan dalam memenuhi kebutuhan air bersih
semakin meningkat seiring dengan pertumbuhan populasi, urbanisasi, dan
perubahan iklim. Infrastruktur air tradisional sering kali kurang efisien, mahal,
dan tidak berkelanjutan dalam jangka panjang. Oleh karena itu, diperlukan
pendekatan inovatif dalam merancang dan membangun infrastruktur air yang
lebih efisien dan ramah lingkungan.
Salah satu pendekatan yang menjanjikan adalah Building H2O.
Building H2O merupakan konsep yang menggabungkan prinsip-prinsip desain
ramah lingkungan dengan teknologi canggih untuk menciptakan bangunan yang
efisien dalam penggunaan air, pengolahan air limbah, dan penggunaan energi.
Pendekatan ini bertujuan untuk mencapai tujuan yang berkelanjutan, yaitu
mengoptimalkan penggunaan sumber daya air, mengurangi limbah, menghemat
energi, dan meminimalkan dampak negatif terhadap lingkungan.
Building H2O melibatkan integrasi yang holistik antara sumber daya air,
pengolahan air limbah, dan penggunaan energi dalam bangunan. Misalnya,
bangunan dapat dirancang untuk mengumpulkan air hujan dan mengolahnya
menjadi air minum melalui sistem filtrasi dan penyaringan yang efisien. Selain
itu, penggunaan air di dalam bangunan dapat dioptimalkan melalui penggunaan
teknologi hemat air, seperti shower dengan volume air yang disesuaikan dan
toilet dengan sistem pembilasan yang efisien. Limbah cair yang dihasilkan
dalam bangunan juga dapat dikelola dengan metode pengolahan yang inovatif,
seperti sistem daur ulang air limbah dan penggunaan biofilter untuk
memurnikan air.
Manfaat dari penerapan Building H2O sangatlah beragam. Pertama,
pendekatan ini dapat menghemat air dengan mengoptimalkan penggunaan
sumber daya air yang ada dan mengurangi kebutuhan akan pasokan air baru.
Kedua, Building H2O juga dapat mengurangi penggunaan energi dengan

1
memanfaatkan teknologi hemat energi dalam pengolahan air dan penggunaan
energi di dalam bangunan. Ketiga, pendekatan ini dapat mengurangi dampak
lingkungan melalui pengurangan limbah cair yang dibuang ke sistem
pembuangan umum dan mengurangi dampak penurunan kualitas air tanah
Namun, implementasi Building H2O juga melibatkan tantangan. Salah
satunya adalah biaya implementasi yang mungkin lebih tinggi dibandingkan
dengan infrastruktur air tradisional. Selain itu, adopsi konsep ini juga
memerlukan perubahan paradigma dalam desain, konstruksi, dan
pengoperasian bangunan, serta dukungan pemerintah, industri, dan masyarakat
untuk mengatasi hambatan-hambatan tersebut. Dalam tulisan ini, kami akan
membahas konsep Building H2O secara mendalam dan menganalisis manfaat
serta tantangan dalam menerapkan pendekatan.

1.2 Rumusan Masalah


Adapun rumusan masalah dari tulisan ini sebagai berikut:
1.2.1 Jelaskan latar belakang tentang hydrogen dan oksigen!
1.2.2 Jelaskan permasalahan Building H2O!
1.2.3 Jabarkan penyelesian dari permasalahan Building H2O!
1.2.4 Bagaimana solusi dalam bentuk program, semaphore, semaphore-barrier
dari permasalahan Building H2O?

1.3 Tujuan
Adapun tujuan dari penulisan ini sebagai berikut:
1.3.1 Menjelaskan latar belakang tentang hydrogen dan oksigen!
1.3.2 Menjelaskan permasalahan Building H2O!
1.3.3 Menjabarkan penyelesian dari permasalahan Building H2O!
1.3.4 Mengetahui solusi dalam bentuk program dan semaphore dari
permasalahan Building H2O.

2
BAB II PEMBAHASAN

2.1 Latar Belakang Hydrogen Dan Oksigen


Hydrogen (H) adalah unsur kimia yang paling ringan dan paling
melimpah di alam semesta. Dalam tabel periodik, hydrogen berada pada urutan
pertama dengan nomor atom 1. Unsur ini terdiri dari satu proton di inti atomnya
dan satu elektron mengelilinginya. Hydrogen adalah unsur yang sangat penting
dalam kehidupan kita dan memiliki berbagai aplikasi yang luas. Berikut adalah
beberapa poin penting tentang hydrogen (Wei C, 2019)1:
a. Kehadiran di Alam Semesta: Hydrogen adalah unsur yang paling melimpah
di alam semesta. Dalam keadaan alami, hydrogen ditemukan dalam bentuk
gas di atmosfer bumi dan sebagai bagian dari berbagai senyawa, seperti air
(H2O) dan hidrokarbon.
b. Pembentukan Air: Salah satu peran penting hydrogen adalah sebagai salah
satu komponen utama dalam air (H2O). Dalam molekul air, dua atom
hydrogen bergabung dengan satu atom oksigen untuk membentuk ikatan
kovalen. Reaksi ini penting dalam berbagai proses biologis dan geologis di
Bumi.
c. Bahan Bakar Alternatif: Hydrogen juga digunakan sebagai bahan bakar
alternatif yang ramah lingkungan. Ketika hydrogen terbakar dalam
kehadiran oksigen, hasilnya hanya menghasilkan air, tidak ada emisi gas
rumah kaca atau polutan lainnya. Oleh karena itu, teknologi sel bahan bakar
dan mobil hidrogen sedang dikembangkan untuk mengurangi
ketergantungan kita pada bahan bakar fosil.
d. Industri Kimia: Hydrogen memiliki peran penting dalam industri kimia.
Misalnya, hydrogen digunakan dalam produksi amonia, yang merupakan
bahan baku dalam pembuatan pupuk dan bahan kimia lainnya. Selain itu,

1
Wei C, Rao RR, Peng J, et al. Recommended Practices and Benchmark Activity for Hydrogen and
Oxygen Electrocatalysis in Water Splitting and Fuel Cells. Adv Mater. 2019;31(31):e1806296.
doi:10.1002/adma.201806296

3
hydrogen juga digunakan dalam proses hidrogenasi untuk mengubah
minyak nabati menjadi lemak padat seperti margarin.
Energi Terbarukan: Hydrogen juga dianggap sebagai sumber energi
terbarukan potensial. Produksi hydrogen dari sumber energi terbarukan
seperti matahari dan angin dapat menghasilkan bahan bakar yang dapat
disimpan dan digunakan saat dibutuhkan. Namun, tantangan utama adalah
efisiensi dan biaya produksi hydrogen dalam skala besar.

Salah satu aspek penting dari penggunaan hidrogen dalam Building 2.0
adalah sebagai bahan bakar alternatif. Hidrogen dapat digunakan dalam sel
bahan bakar untuk menghasilkan listrik dan panas, dengan hanya menghasilkan
air sebagai produk sampingan. Keuntungan utama dari menggunakan hidrogen
sebagai bahan bakar adalah bahwa tidak ada emisi karbon yang dihasilkan
selama proses pembakaran. Ini berarti bahwa menggunakan hidrogen sebagai
sumber energi dapat membantu mengurangi dampak lingkungan dan
mengurangi jejak karbon bangunan. Selain itu, hidrogen juga dapat digunakan
sebagai bahan baku dalam proses produksi industri yang berkelanjutan.
Misalnya, hidrogen dapat digunakan dalam produksi baja tanpa emisi karbon,
di mana hidrogen berfungsi sebagai agen reduksi untuk mengurangi bijih besi
menjadi logam baja. Ini merupakan langkah penting dalam menciptakan
industri baja yang lebih ramah lingkungan.
Namun, penggunaan hidrogen dalam Building 2.0 juga memiliki beberapa
tantangan. Salah satunya adalah masalah penyimpanan dan distribusi hidrogen
yang aman dan efisien. Hidrogen memiliki sifat yang sangat mudah terbakar
dan mudah terlepas, sehingga memerlukan sistem penyimpanan dan
penanganan khusus yang memenuhi standar keamanan yang ketat. Selain itu,
infrastruktur untuk distribusi hidrogen juga masih terbatas, sehingga perlu
pengembangan lebih lanjut untuk mendukung penggunaan hidrogen secara
luas dalam sektor bangunan.

4
Oksigen (O) adalah unsur kimia yang sangat penting bagi kehidupan di
Bumi. Secara kimiawi, oksigen adalah unsur nonlogam yang termasuk dalam
golongan 16 atau golongan oksigen dalam tabel periodik. Oksigen memiliki
nomor atom 8, yang berarti atomnya memiliki delapan elektron yang terdiri dari
dua elektron dalam kulit dalam dan enam elektron dalam kulit luar. Ini membuat
oksigen menjadi sangat reaktif secara kimia.
Oksigen ada dalam bentuk gas di atmosfer Bumi, membentuk sekitar 21%
dari volume atmosfer. Gas oksigen yang kita hirup sangat penting bagi semua
bentuk kehidupan yang bergantung pada respirasi aerobik, termasuk manusia,
hewan, dan sebagian besar mikroorganisme. Dalam proses respirasi aerobik,
oksigen digunakan oleh organisme untuk mengoksidasi atau membakar zat
makanan yang dikonsumsi dan menghasilkan energi yang diperlukan untuk
fungsi seluler. Selain peran vitalnya dalam respirasi aerobik, oksigen juga
memiliki berbagai aplikasi dalam industri dan ilmu pengetahuan
(Thomas GP, 2019)2. Beberapa penggunaan oksigen meliputi:
a. Industri dan Manufaktur: Oksigen digunakan dalam proses produksi logam,
seperti pembuatan baja dan besi tuang. Hal ini juga digunakan dalam proses
oksidasi dan pembakaran dalam industri kimia dan petrokimia. Oksigen
juga digunakan dalam pengelasan, pemotongan logam, dan penggunaan
oksigen terapeutik.
b. Perawatan Medis: Oksigen digunakan dalam perawatan medis untuk
menyediakan suplementasi oksigen kepada pasien dengan gangguan
pernapasan atau kondisi medis tertentu. Ini dapat dilakukan melalui
penggunaan tabung oksigen atau melalui ventilasi mekanik.
c. Aplikasi Ruang Angkasa: Oksigen sangat penting dalam industri ruang
angkasa, di mana ia digunakan sebagai oksidator dalam roket dan sistem
propulsi. Ini memungkinkan pembakaran bahan bakar yang efisien di
lingkungan yang kurang memiliki oksigen.

2
Thomas, G.P.. (2019, May 07). Oxygen (O) - Discovery, Occurrence, Production, Properties and
Applications of Oxygen. AZoM. Retrieved on June 07, 2023 from
https://www.azom.com/article.aspx?ArticleID=7931

4
d. Lingkungan dan Ekologi: Oksigen berperan penting dalam siklus oksigen di
lingkungan. Proses fotosintesis pada tumbuhan menghasilkan oksigen
sebagai produk sampingan, dan oksigen ini dilepaskan ke atmosfer. Oksigen
di air juga penting untuk kehidupan akuatik, termasuk organisme laut dan
perairan.

2.2 Permasalahan Building H2O


Building H2O adalah masalah konkurensi yang melibatkan pembuatan
molekul air menggunakan dua jenis thread: oksigen dan hidrogen. Thread-
thread ini harus dikelompokkan untuk membentuk molekul air, dan ada sebuah
penghalang di mana setiap thread harus menunggu sampai molekul lengkap
terbentuk (Jaramillo TF, 2015)3. Dalam permasalahan Building H2O, ada
implementasi sinkronisasi thread dalam tembentukan molekul air menggunakan
barier dan semaphore.
Barier adalah barrier (penghalang) adalah mekanisme yang digunakan
untuk memastikan bahwa semua thread atau proses yang terlibat dalam
komputasi paralel mencapai titik tertentu sebelum melanjutkan eksekusi lebih
lanjut. Barrier berguna dalam situasi di mana thread atau proses perlu
berkoordinasi dan menunggu satu sama lain sebelum melanjutkan ke langkah
selanjutnya. Barrier biasanya diimplementasikan sebagai variabel khusus yang
diakses oleh setiap thread atau proses. Setiap thread atau proses akan mencapai
barrier, dan hanya ketika semua thread atau proses telah mencapai barrier,
mereka akan diizinkan untuk melanjutkan eksekusi lebih lanjut. Barrier dapat
membantu menghindari situasi di mana satu thread atau proses lebih maju
daripada yang lain, sehingga memastikan konsistensi dan koordinasi dalam
eksekusi paralel. Sedangkan, semaphore adalah mekanisme penting yang
digunakan dalam sistem operasi, terutama dalam lingkungan multithread, untuk
memastikan bahwa dua atau lebih segmen kode kunci tidak dipanggil secara

3
McCrory CCL, Jung S, Ferrer IM, Chatman SM, Peters JC, Jaramillo TF. Benchmarking hydrogen
evolving reaction and oxygen evolving reaction electrocatalysts for solar water splitting devices. J
Am Chem Soc. 2015;137(13):4347-4357. doi:10.1021/ja510442p

5
bersamaa. Ini adalah alat sinkronisasi yang mengontrol akses ke sumber daya
bersama dalam sistem konkuren. Semaphore adalah variabel yang digunakan
untuk memecahkan masalah bagian kritis dengan mengontrol akses ke sumber
daya bersama dalam sistem konkuren. Semaphore dapat diimplementasikan
dengan berbagai cara, seperti spinlock dasar, perluasan jumlah semaphore, dan
struktur rantai kunci. Implementasi perangkat keras dari manajemen semaphore
juga dapat dilakukan untuk meningkatkan kemampuan respons sistem operasi
waktu nyata (Lindkk, 2021)4.
Adapun implementasinya sebagai berikut:
a. Thread-thread tidak harus mengetahui thread lain dengan siapa mereka
berpasangan, tetapi mereka harus melewati barier dalam kelompok lengkap.
Contoh: Jika ada 4 thread, mereka harus membentuk dua pasang lengkap
untuk melintasi barrier.
b. Setiap kelompok harus terdiri dari satu thread oksigen dan dua thread
hidrogen. Contoh: Jika ada 3 thread, mereka harus membentuk satu
kelompok lengkap dengan satu thread oksigen dan dua thread hidrogen.
c. Kelas CyclicBarrier dari paket java.util.concurrent dapat digunakan untuk
mengelompokkan fungsi barier. Contoh: Dengan menggunakan
CyclicBarrier, kita dapat mengatur barier untuk menunggu hingga semua
thread siap sebelum melanjutkan.
d. Thread-thread harus disinkronkan untuk memastikan bahwa semua thread
dari satu molekul memanggil ikatan sebelum thread dari molekul
berikutnya. Contoh: Jika ada 2 molekul, setiap molekul harus
menyelesaikan ikatan sebelum molekul berikutnya melakukannya.
e. Jika sebuah thread oksigen tiba di barier ketika tidak ada thread hidrogen,
maka thread oksigen harus menunggu dua thread hidrogen. Jika sebuah
thread hidrogen tiba di barier ketika tidak ada thread lain, maka thread
hidrogen harus menunggu thread oksigen dan satu thread hidrogen lagi.
Contoh: Jika ada 2 thread oksigen dan 3 thread hidrogen, satu thread

4
Lin ZG, Ding H. Research on multithread programming method based on Java programming. 2021
3rd Int Conf Artif Intell Adv Manuf. Published online 2021.

6
hidrogen harus menunggu thread oksigen dan satu thread hidrogen lagi
sebelum mereka semua dapat melintasi barier.
f. Semaphore juga dapat digunakan untuk menyelesaikan masalah ini.
Contoh: Dengan menggunakan Semaphore, kita dapat mengontrol jumlah
izin yang tersedia untuk setiap jenis thread, sehingga memastikan
kelompok-kelompok lengkap terbentuk sebelum melintasi barier.

2.3 Penyelesaian Permasalahan Building H2O


Dengan menggunakan struktur lewis, proses pembentukan senyawa
H2O digambarkan sebagai berikut:

Pada gambar struktur lewis H2O di atas, setiap atom H memiliki 2


elektron valensi (seperti He) dan atom O memiliki 8 elektron valensi (seperti
Ne). Karena sudah mencapai kaidah oktet-duplet maka senyawa ini sudah
stabil. Pada ikatan kovalen ini terdapat dua pasang elektron ikatan (PEI) dan
dua pasang elektron bebas (PEB).
Proses Pembentukan Ikatan Kovalen Pada Senyawa H2O. Atom O akan
stabil jika mengikat dua elektron membentuk konfigurasi mirip dengan atom
Ne (2, 8) sesuai aturan oktet. Sedangkan atom H akan stabil jika mengikat satu
elektron membentuk konfigurasi mirip He (2). Dengan demikian, dalam H2O,
satu atom oksigen dan dua atom hidrogen membentuk ikatan kovalen. Atom
oksigen berbagi dua pasang elektron dengan atom hidrogen, sehingga atom

7
oksigen memiliki delapan elektron di kulit valensinya (2 elektron sendiri dan 6
elektron dari ikatan kovalen). Atom hidrogen juga memiliki dua elektron di
kulit valensinya (1 elektron sendiri dan 1 elektron dari ikatan kovalen) (Barati
Darband G, 2020)5.

2.4 Solusi Dalam Bentuk Program Bahasa C# Dan Program Semaphore Dari
Permasalahan Building H2O
1. Program C# (Solusi Pertama)
a. Program

using System;
using System.Collections.Generic;

public class Program


{
// Konstanta untuk Reaktan dan Produk
private const string HYDROGEN = "H2";
private const string OXYGEN = "O2";
private const string WATER = "H2O";

public static void Main()


{
// Contoh Penggunaan
var chemicals = new Dictionary<string, int>
{
{ HYDROGEN, 6 },
{ OXYGEN, 3 },
{ WATER , 0 }
};

// Membangun Air
BuildWater(chemicals);
}

public static void BuildWater(Dictionary<string, int> chemicals)


{
// Periksa jika ada hidrogen dan oksigen yang cukup untuk
bereaksi.
if (chemicals.ContainsKey(HYDROGEN) &&
chemicals.ContainsKey(OXYGEN))
{
int hydrogenCount = chemicals[HYDROGEN];
int oxygenCount = chemicals[OXYGEN];

if (hydrogenCount >= 2 && oxygenCount >= 1)

5
Barati Darband G, Aliofkhazraei M, Hyun S, Shanmugam S. Pulse Electrodeposition of a
Superhydrophilic and Binder-Free Ni-Fe-P Nanostructure as Highly Active and Durable
Electrocatalyst for Both Hydrogen and Oxygen Evolution Reactions. ACS Appl Mater Interfaces.
2020;12(48):53719-53730. doi:10.1021/acsami.0c13648

8
{
// Hitung jumlah maksimal molekul air yang bisa
dibentuk
int waterCount = Math.Min(hydrogenCount / 2,
oxygenCount);

// Perbarui jumlah kimia setelah reaksi


chemicals[HYDROGEN] -= waterCount * 2;
chemicals[OXYGEN] -= waterCount;
chemicals[WATER] += waterCount;

Console.WriteLine("{waterCount} Molekul Air (H2O)


Terbentuk.");
Console.WriteLine("Jumlah Hidrogen Tersisa: " +
chemicals[HYDROGEN]);
Console.WriteLine("Jumlah Oksigen Tersisa: " +
chemicals[OXYGEN]);
Console.WriteLine("Jumlah Air Tersisa: " +
chemicals[WATER]);
Console.ReadLine();
}
else
{
Console.WriteLine("Tidak Cukup Reaktan untuk membuat
air.");
Console.ReadLine();
}
}
else
{
Console.WriteLine("Reaktan tidak ada.");
Console.ReadLine();
}
}
}

b. Hasil
Output dari program di atas adalah:

Penjelasan:
1) Pada awalnya, terdapat 2 molekul hidrogen (H2) dan 8 molekul
oksigen (O2), serta tidak ada molekul air (H2O).

9
2) Karena terdapat cukup reaktan, yaitu setidaknya 2 molekul hidrogen
dan 1 molekul oksigen, program dapat membangun 1 molekul air
(H2O).
3) Setelah reaksi terjadi, 1 molekul hidrogen digunakan (menjadi 0
molekul), 1 molekul oksigen digunakan (menjadi 7 molekul), dan 1
molekul air terbentuk.
4) Jumlah reaktan dan produk yang tersisa ditampilkan di layar.

Program akan berhenti dan menunggu input pengguna sebelum


menutup jendela konsol, karena ada pemanggilan `Console.ReadLine()`
di setiap cabang kondisi.

c. Pembahasan
1) Baris 1 dan 2: mengimpor namespace yang diperlukan.
2) Baris 7 – 9: mendefinisikan konstanta untuk reaktan dan produk.
3) Baris 11 – 23: metode Main() adalah entry point program.
4) Baris 25: metode BuildWater() menerima parameter chemicals yang
berupa Dictionary<string, int> yang berisi jumlah reaktan yang
tersedia.
5) Baris 28: program memeriksa apakah ada cukup reaktan (hidrogen
dan oksigen) yang tersedia untuk bereaksi.
6) Baris 33: jika reaktan yang cukup tersedia, program memeriksa
apakah jumlah hidrogen minimal 2 dan jumlah oksigen minimal 1
untuk membentuk air.
7) Baris 37: program menghitung jumlah maksimal molekul air yang
bisa dibentuk berdasarkan jumlah hidrogen dan oksigen yang
tersedia.
8) Baris 39 – 41: program memperbarui jumlah reaktan setelah reaksi
terjadi.
9) Baris 43 – 47: program mencetak jumlah molekul air yang terbentuk,
serta jumlah hidrogen, oksigen, dan air yang tersisa setelah reaksi.

10
10) Baris 51: jika reaktan tidak cukup untuk membentuk air, program
mencetak pesan "Tidak Cukup Reaktan untuk membuat air".
11) Baris 57: jika reaktan tidak tersedia, program mencetak pesan
"Reaktan tidak ada".
12) Setelah mencetak pesan, program membaca baris masukan dari
pengguna menggunakan Console.ReadLine(). Ini dilakukan agar
program tidak langsung keluar setelah mencetak pesan dan tetap
menunggu masukan dari pengguna sebelum program berakhir.
2. Program Semaphore (Solusi Kedua)
a. Program
import java.util.concurrent.Semaphore;

class H2O {
private Semaphore hydrogen = new Semaphore(2);
private Semaphore oxygen = new Semaphore();

public H2O() {}

public void hydrogen(Runnable releaseHydrogen) throws


InterruptedException {
hydrogen.acquire();
// Mengeluarkan atom hidrogen
try {
releaseHydrogen.run();
} finally {
// Jika semua atom hidrogen telah dibebaskan, maka
melepaskan atom oksigen
if (hydrogen.availablePermits() == 0) {
oxygen.release();
}
}
}

public void oxygen(Runnable releaseOxygen) throws


InterruptedException {
oxygen.acquire();
// Mengeluarkan atom oksigen
try {
releaseOxygen.run();
} finally {
// Melepaskan dua atom hidrogen
hydrogen.release(2);
}
}
}

11
b. Hasil
Output dari program tersebut tidak disediakan, karena program
tersebut hanya mengimplementasikan kelas H2O yang digunakan untuk
mengatur dan sinkronisasi perilaku atom hidrogen dan oksigen. Untuk
menghasilkan output yang sesuai, Anda perlu menggunakan kode
tambahan untuk membuat instance dari kelas H2O, mengatur thread
yang menjalankan metode hydrogen dan oxygen, serta menentukan
tindakan yang dilakukan oleh metode releaseHydrogen dan
releaseOxygen.
c. Pembahasan
1) `import java.util.concurrent.Semaphore;` = Baris ini
mengimpor kelas Semaphore yang diperlukan untuk menggunakan
semafora dalam kode.
2) `class H2O { ... }` = Ini adalah deklarasi kelas H2O yang
mengelompokkan semua metode dan atribut terkait dalam satu
kesatuan.
3) `private Semaphore hydrogen = new Semaphore(2);` =
Ini adalah deklarasi variabel `hydrogen` yang bertipe Semaphore
dan memiliki inisialisasi awal dengan nilai 2. Semafora digunakan
untuk mengontrol akses ke atom hidrogen.
4) `private Semaphore oxygen = new Semaphore();` = Ini
adalah deklarasi variabel `oxygen` yang bertipe Semaphore tanpa
parameter inisialisasi. Semafora ini digunakan untuk mengontrol
akses ke atom oksigen.
5) `public H2O() {}` = Ini adalah konstruktor kelas H2O yang
tidak memiliki parameter. Konstruktor ini digunakan untuk
membuat objek H2O.
6) `public void hydrogen(Runnable releaseHydrogen)
throws InterruptedException { ... }`
a) Ini adalah metode `hydrogen` yang menerima objek
`releaseHydrogen` yang bertipe Runnable sebagai parameter.

12
Metode ini mengindikasikan perilaku proses hidrogen dalam
pembentukan air.
b) `hydrogen.acquire();` menunjukkan bahwa atom hidrogen
sedang menunggu untuk mendapatkan izin (permit) dari
semafora `hydrogen`. Jika permit tersedia, atom hidrogen dapat
melanjutkan.
c) `releaseHydrogen.run();` menjalankan tindakan yang
diimplementasikan dalam objek `releaseHydrogen`, yang
mengeluarkan atom hidrogen.
d) `finally { ... }` blok ini memastikan bahwa bagian yang ada di
dalamnya akan dieksekusi setelah blok try, terlepas dari apa pun
yang terjadi. Dalam hal ini, `if (hydrogen.availablePermits() ==
0)` memeriksa apakah semua atom hidrogen telah dibebaskan.
Jika ya, `oxygen.release()` membebaskan atom oksigen.
7) `public void oxygen(Runnable releaseOxygen) throws
InterruptedException { ... }`
a) Ini adalah metode `oxygen` yang menerima objek
`releaseOxygen` yang bertipe Runnable sebagai parameter.
Metode ini mengindikasikan perilaku proses oksigen dalam
pembentukan air.
b) `oxygen.acquire();` menunjukkan bahwa atom oksigen sedang
menunggu untuk mendapatkan izin (permit) dari semafora
`oxygen`. Jika permit tersedia, atom oksigen dapat melanjutkan.
c) `releaseOxygen.run();` menjalankan tindakan yang
diimplementasikan dalam objek `releaseOxygen`, yang
mengeluarkan atom oksigen.
d) `finally { ... }` blok ini memastikan bahwa bagian yang ada di
dalamnya akan dieksekusi setelah blok try, terlepas dari apa pun
yang terjadi. Dalam hal ini, `hydrogen.release(2)`
membebaskan dua atom hidrogen.

13
3. Program Semaphore dan Barrier (Solusi Ketiga)
a. Program
class H2O {

private Semaphore hydrogen = new Semaphore(2);


private Semaphore oxygen = new Semaphore(1);
private CyclicBarrier cb = new CyclicBarrier(3);

public void hydrogen(Runnable releaseHydrogen) throws


InterruptedException {

// releaseHydrogen.run() outputs "H". Do not change or


remove this line.
try{
hydrogen.acquire();

releaseHydrogen.run();

cb.await();
hydrogen.release();
}catch(Exception e){

public void oxygen(Runnable releaseOxygen) throws


InterruptedException {

// releaseOxygen.run() outputs "O". Do not change or remove


this line.
try{
oxygen.acquire();

releaseOxygen.run();

cb.await();
oxygen.release();
}catch(Exception e){

}
}
}
b. Hasil
1) Contoh Output 1:

H
H
O

2) Contoh Output 2:

14
H
O
H

3) Contoh Output 3:

O
H
H

Program di atas adalah implementasi kelas H2O dalam Java. Kelas


ini menggunakan semafor dan CyclicBarrier untuk mengatur interaksi
antara atom hidrogen (H) dan atom oksigen (O) dalam pembentukan
molekul air (H2O). Program ini dirancang untuk mencetak "H" ketika
metode hydrogen() dipanggil, dan mencetak "O" ketika metode
oxygen() dipanggil.
Perlu dicatat bahwa urutan pemanggilan metode hydrogen() dan
oxygen() akan mempengaruhi urutan output. Namun, setiap molekul air
(H2O) akan terdiri dari dua atom hidrogen dan satu atom oksigen, dan
output harus mencerminkan hal ini.
e) Pembahasan
Pada saat inisialisasi kelas H2O, kita membuat dan menginisialisasi
2 Semaphore dan 1 CyclicBarrier seperti yang disebutkan di bawah ini:
1) hydrogen - diinisialisasi dengan izin 2 (karena kita perlu mencetak
H dua kali).
2) oxygen - diinisialisasi dengan izin 1 (karena kita perlu mencetak O
satu kali).
3) cb - diinisialisasi dengan jumlah partisipan 3 (karena kita ingin
menunggu sampai 2 hydrogen dan satu oxygen dicetak).

Mari kita pertimbangkan 3 skenario berikut:


1) HH - Dua thread pertama memanggil metode hydrogen (Runnable
releaseHydrogen), karena kita memiliki 2 izin pada semaphore
hydrogen, kedua thread tersebut akan mendapatkan akses dan

15
mencetak HH, kemudian memanggil cb.await() (cb belum terpecah
karena cb masih memiliki 1 partisipan). Sekarang, tidak ada thread
lain yang dapat memperoleh izin pada semaphore hydrogen karena
izinnya adalah 0, dan cb hanya akan terpecah ketika satu thread lagi
memanggil cb.await(), yang berarti hanya thread oxygen yang dapat
memecahkan cb. Oleh karena itu, kita akan mencetak HHO.
2) OO - Dua thread pertama memanggil metode oxygen (Runnable
releaseOxygen), karena kita memiliki 1 izin pada semaphore
oxygen, satu thread akan mendapatkan akses ke oxygen dan thread
lainnya akan menunggu di oxygen.acquire(). Thread pertama yang
mendapatkan akses akan mencetak O dan menjalankan cb.await()
(mengurangi nilai partisipan menjadi 2). Thread ini tidak dapat
melanjutkan karena cyclic barrier. Thread lain untuk O sedang
menunggu di metode oxygen.acquire(), karena kita memiliki 1 izin.
Satu-satunya cara untuk memecahkan cb adalah ketika 2 thread
hydrogen dieksekusi. Dengan demikian, mencetak OHH. Thread
oxygen lainnya kemudian akan mendapatkan akses ke semaphore
dan akan mencetak satu batch H2O lagi.
3) OH / HO - Dua thread pertama adalah OH atau HO, eksekusi akan
campuran dari 2 skenario di atas. Salah satu mendapatkan akses ke
semaphore oxygen dan yang lainnya mendapatkan akses ke
semaphore hydrogen. Dengan demikian, mencetak OH atau HO dan
cb akan menunggu untuk diputuskan oleh satu thread H. Dengan
demikian, pada akhirnya akan mencetak OHH atau HOH.
Proses di atas akan diulang sampai masukan berakhir..

16
BAB III PENUTUP

3.1 Kesimpulan
Membangun H2O adalah masalah yang melibatkan pemrograman
bersamaan dan penggunaan semaphore. Tujuannya adalah mengelompokkan
dua jenis thread, yaitu hidrogen dan oksigen, untuk membentuk molekul air.
Dalam permasalahan ini, kami menggunakan bahasa pemrograman C# dan
solusi semaphore.
Pada program yang kami ciptakan, terdapat atom hidrogen dan oksigen.
Misalnya, dalam kasus ini, kami menginputkan dua atom hidrogen dan delapan
atom oksigen. Dari jumlah tersebut, akan terbentuk satu molekul air. Setelah
reaksi selesai, molekul air (H2O) terbentuk, dengan dua atom hidrogen (H) yang
terikat pada delapan atom oksigen (O).
Solusi menggunakan semaphore merupakan pendekatan untuk mengatasi
masalah ini dengan mengontrol akses thread ke sumber daya bersama. Dalam
hal ini, kami menggunakan dua semaphore, satu untuk hidrogen dan satu untuk
oksigen. Semaphore membantu mengatur jumlah thread yang dapat mengakses
sumber daya bersama secara bersamaan.
Dengan menggunakan pemrograman bersamaan dan semaphore, kita dapat
mengkoordinasikan dan mengatur thread hidrogen dan oksigen untuk
membentuk molekul air secara bersamaan, sehingga memastikan pembentukan
H2O terjadi dengan benar.

16
DAFTAR PUSTAKA

Wei C, Rao RR, Peng J, et al. Recommended Practices and Benchmark Activity for
Hydrogen and Oxygen Electrocatalysis in Water Splitting and Fuel Cells.
Adv Mater. 2019;31(31):e1806296. doi:10.1002/adma.201806296
Jin H, Wang J, Su D, Wei Z, Pang Z, Wang Y. In situ cobalt-cobalt oxide/N-doped
carbon hybrids as superior bifunctional electrocatalysts for hydrogen and
oxygen evolution. J Am Chem Soc. 2015;137(7):2688-2694.
doi:10.1021/ja5127165
McCrory CCL, Jung S, Ferrer IM, Chatman SM, Peters JC, Jaramillo TF.
Benchmarking hydrogen evolving reaction and oxygen evolving
reaction electrocatalysts for solar water splitting devices. J Am Chem Soc.
2015;137(13):4347-4357. doi:10.1021/ja510442p
Barati Darband G, Aliofkhazraei M, Hyun S, Shanmugam S. Pulse
Electrodeposition of a Superhydrophilic and Binder-Free Ni-Fe-
P Nanostructure as Highly Active and Durable Electrocatalyst for Both
Hydrogen and Oxygen Evolution Reactions. ACS Appl Mater Interfaces.
2020;12(48):53719-53730. doi:10.1021/acsami.0c13648
Lin ZG, Ding H. Research on multithread programming method based on Java
programming. 2021 3rd Int Conf Artif Intell Adv Manuf. Published online
2021.
Sun H, Yan Z, Liu F, Xu W, Cheng F, Chen J. Self-Supported Transition-Metal-
Based Electrocatalysts for Hydrogen and Oxygen Evolution. Adv Mater.
2020;32(3):e1806326. doi:10.1002/adma.201806326
Thomas, G.P.. (2019, May 07). Oxygen (O) - Discovery, Occurrence, Production,
Properties and Applications of Oxygen. AZoM. Retrieved on June 07, 2023
from https://www.azom.com/article.aspx?ArticleID=7931.
Scripps Institute. "Atmospheric Oxygen Research". Archived from the original on
July 25, 2017. Retrieved October 8, 2011.
IEA (2019), The Future of Hydrogen, IEA, Paris https://www.iea.org/reports/the-
future-of-hydrogen, License: CC BY 4.0
Palmer, David (13 November, 1997). "Hydrogen in the Universe". NASA. Diakses
tanggal 05-02-2008. Staff (2007). "Hydrogen Basics — Production"
"Hydrogen". Van Nostrand's Encyclopedia of Chemistry. Wylie-Interscience. 2005.
hlm. 797–799. ISBN 0-471-61525-0.

17

Anda mungkin juga menyukai