4.4. Tugas: Laboratorium Pembelajaran Ilmu Komputer Fakultas Ilmu Komputer Universitas Brawijaya
4.4. Tugas: Laboratorium Pembelajaran Ilmu Komputer Fakultas Ilmu Komputer Universitas Brawijaya
4.4. Tugas: Laboratorium Pembelajaran Ilmu Komputer Fakultas Ilmu Komputer Universitas Brawijaya
4.4. Tugas
1. Berikut ini adalah sebuah kode program yang dijalankan secara
sekuensial. Dibentuk menjadi satu proses dengan single thread.
singlethread.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct acct_t {
int bal;
};
/*
* Pointer to accounts
*/
struct acct_t *accts;
/*
* Method to perform a number of transactions.
* Parameter "dummy" is not used.
*/
void *transact(void *dummy)
{
int i;
for (i = 0; i < num_trans; i++) {
// pick two random accounts
int acct_id_from = rand() % num_accts;
int acct_id_to = rand() % num_accts;
// pick a random amount
int amt = rand() % 100;
return 0;
}
2. Kompilasi kode program tersebut dan simpan dengan nama berkas
singlethread.
c. Terdiri dari minimal 1000 kata diluar judul, sub judul, kode program
dan referensi.
I. Pendahuluan
Pada kodingan sebelumnya yakni singlethread.c akan
mengeluarkan output yakni
II. Isi
Untuk memulainya kita akan menambahkan beberapa kodingan
baru dimulai dari struct hingga looping sebagai berikut:
thradtiga.c
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
struct acct_t
{
int bal;
};
int i;
for (i = 1; i < argc; i++)
{
if (!strcmp(argv[i], "-a")) {
num_accts = atoi(argv[i+1]);
i++;}
else if (!strcmp(argv[i], "-i")) {
num_trans = atoi(argv[i+1]);
i++; }
else if (!strcmp(argv[i], "-t")) {
think_time = atoi(argv[i+1]);
i++;}
else if (!strcmp(argv[i], "-p")) {
num_thread = atoi(argv[i+1]);
i++;}
else {
fprintf(stderr, "Pemakaian: %s [-a <accts>] [-i
<transactions>] [-t <think-time>] [-p<thread-
num>]\n", argv[0]);
exit(-1);}
}
srand(1);
int original_sum = 0;
for (i = 0; i < num_accts; i++) {
accts[i].bal = rand() % 1000;
original_sum += accts[i].bal;
}
pthread_t* threads[num_thread];
num_trans = num_trans / num_thread;
for(i = 0; i < num_thread; i++) {
thread_count = i+1;
printf("THREAD %d telah terbuat \n", i+1);
pthread_t * p =
(pthread_t*)malloc(sizeof(pthread_t));
pthread_create(p, NULL, transact, (void*)&i+1);
threads[i] = p;
}
int sum = 0;
for (i = 0; i < num_accts; i++) {
sum += accts[i].bal;
}
if (sum != original_sum) {
fprintf(stderr, "ERROR! Total Awal = %d, Total
= %d\n", original_sum, sum);}
else{
fprintf(stderr, "Nilai tetap KONSISTEN\n");}
return 0;
}
Stdio.h
Library ini merupakan jenis library umum yang harus
dipakai pada setiap pemrograman C. stdio sendiri adalah
singkatan dari Standar Input and Output, library ini
menggunakan apa yang akan dikenal sebagai streams
untuk mengoperasikan hardware input yang dikenal oleh
system.
Pthread.h
Library jenis ini diperlukan dalam konteks membuat suatu
thread pada kodingan kita. Karena library ini akan
memungkinkan kita membuat thread melalui
pthread_create()
Fungsi diatas diperlukan untuk membuat thread baru dan
hanya bisa diberhentikan dengan fungsi kembali
Pthread_exit()
Stdlib.h
Library ini merupakan jenis library yang bertujuan
multifungsi khusunya dalam hal manajemen memori,
angka acak, komunikasi antar peralatan, aritmatika,
sorting maupun perubahan serta pencarian.
Time.h
Library ini merupakan jenis library yang diperlukan disaat
kita ingin memakai nilai waktu untuk kodingan kita,
berguna untuk memanipulasi data maupun informasi
waktu.
String.h
Library ini merupakan jenis linrary yang berguna untuk
memakai tulisan yang akan menggunakan array sehingga
dapat disimpan pada array tersebut. Karena pada
dasarnya C tidak memiliki array sehingga jenis string tidak
akan terbaca.
Selain itu terdapat pula nilai statis yang akan bersifat tetap dan
global untuk semua fungsi yang ada, static ini berguna untuk
menetapkan nilai selama kodingan ini berjalan yakni:
Num_accts
Tipe data ini merupakan integer yang akan diberi nilai
1024.
Num_trans
Tipe data ini merupakan integer yang akan diberi nilai
5000.
Think_time
Tipe data ini merupakan integer yang akan diberi nilai 50.
Num_thread
Tipe data ini merupakan integer yang akan diberi nilai 4.
Thread_count
Tipe data ini merupakan integer yang akan diberi nilai 1.
Struct acct_t
Pada Bahasa pemmrograman C tidak terdapat opsi object
oriented programming namun terdapat opsi yang
mendekati yakni dengan menggunakan struct. Karena
pada dasarnya ia merupakan deklarasi pengelompokan
suatu variabel dalam satu blok memori sehingga variabel
ini dapat dipakai oleh fungsi lainnya, dalam hal ini ia akan
menyimpan nilai yang dikenal sebagai
int bal
yang mana ia akan menyimpan nilai dari suatu pemilik
(accts).
Struct acct_t *accts
Struct jenis ini lebih berguna untuk memanggil dan
menunjukan alamat dari variabel accts.
Void *transact(void *dummy)
Fungsi ini akan berguna untuk mengolah nilai transaction
dengan nilai yang dipakai yakni dummy
Pada fungsi ini akan dilakukan pengecekan dan
pengolahan nilai secara acak dan setelah diolah hal
tersebut, ia akan mengurangi/menambah nilai akhirnya
serta mengalikan total proses yang dibutuhkan untuk
melaksanakan hal itu semua.
Lalu kembali pada fungsi utama yakni int main(), fungsi main
ini terdapat kodingan untuk mengecek apakah terdapat suatu
kesalahan yakni dengan mengecek apakah nilainya ganjil apabila
tidak ia akan keluar dari pengolahan kodingan.
IV. Referensi
Operating System Concepts – 9th Edition; Silberschatz, Galvin
and Gagne (2013)