Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions QUIS SISTER 1/Muhammad Syiarul Amrullah/Barrier.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from random import randrange
from threading import Barrier, Thread
from time import ctime, sleep

num_masakan = 3
finish_line = Barrier(num_masakan)
list_masakan = ['mie ayam', 'mie goreng', 'nasi goreng']

def masakan():
name = list_masakan.pop()
sleep(randrange(2, 5))
print('%s selesai dimasak pada: %s \n' % (name, ctime()))
finish_line.wait()

def main():
threads = []
print('START Cook!!!!')
for i in range(num_masakan):
threads.append(Thread(target=masakan))
threads[-1].start()
for thread in threads:
thread.join()
print('Cook over!')

if __name__ == "__main__":
main()
46 changes: 46 additions & 0 deletions QUIS SISTER 1/Muhammad Syiarul Amrullah/MyThreadClass_lock.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import threading
import random
from threading import Thread
import time


# Lock Definition
threadLock = threading.Lock()

class subclassThread (Thread):
def __init__(self, name):
Thread.__init__(self)
self.name = name
def run(self):
threadLock.acquire()
print("jalankan proses generate random number proses {}".format(self.name))
threads = list()
randomNumber = GenerateRandomNumber()
time.sleep(random.randint(1,10))
print("hasil generate random number {} dari operasi {}".format(randomNumber, self.name))
threadLock.release()
def GenerateRandomNumber():
listRandom = list()
for i in range(0,10):
listRandom.append("arul")
return listRandom

def main():
thread1 = subclassThread("Generate Random Number #1 ")
thread2 = subclassThread("Generate Random Number #2 ")

thread1.start()
thread2.start()

thread1.join()
thread2.join()

print("End")


if __name__ == "__main__":
main()




59 changes: 59 additions & 0 deletions QUIS SISTER 1/Muhammad Syiarul Amrullah/Rlock.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import threading
import time
import random


class kunci_reenant:
def __init__(self):
self.lock = threading.RLock()
self.total_items = 0

def execute(self, value):
with self.lock:
self.total_items += value

def add(self):
with self.lock:
self.execute(1)

def remove(self):
with self.lock:
self.execute(-1)

def penambah(box, items):
print("{} barang masuk gudang \n".format(items))
while items:
box.add()
time.sleep(1)
items -= 1
print("1 barang telah masuk -->{} item akan masuk gudang \n".format(items))



def pengurang(box, items):
print("{} barang keluar dari gudang \n".format(items))
while items:
box.remove()
time.sleep(1)
items -= 1
print("1 barang telah keluar -->{} item akan keluar dari gudang \n".format(items))


def main():
kunci = kunci_reenant()

t1 = threading.Thread(target=penambah, \
args=(kunci, random.randint(10,20)))
t2 = threading.Thread(target=pengurang, \
args=(kunci, random.randint(1,10)))

t1.start()
t2.start()


t1.join()
t2.join()


if __name__ == "__main__":
main()
41 changes: 41 additions & 0 deletions QUIS SISTER 1/Muhammad Syiarul Amrullah/Semaphore.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import logging
import threading
import time
import random

LOG_FORMAT = '%(asctime)s %(threadName)-17s %(levelname)-8s %(message)s'
logging.basicConfig(level=logging.INFO, format=LOG_FORMAT)


semaphore = threading.Semaphore(0)
item = 0


def pelanggan():
logging.info('Pelanggan meminta antrian')
semaphore.acquire()
logging.info('Pelanggan menerima: antrian no {}'.format(item))


def antrian():
global item
time.sleep(3)
item = random.randint(0, 1000)
logging.info('antrian generate: no antrian {}'.format(item))
semaphore.release()


def main():
for i in range(3):
t1 = threading.Thread(target=pelanggan)
t2 = threading.Thread(target=antrian)

t1.start()
t2.start()

t1.join()
t2.join()


if __name__ == "__main__":
main()
19 changes: 19 additions & 0 deletions QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_definition.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import threading
import random

def GenerateRandomNumber(number):
listRandom = list()
for i in range(0,10):
listRandom.append(random.randint(10,100))
print("hasil generate random number {} dari operasi ke {}".format(listRandom, number))

def main():
threads = list()
for i in range(1,11):
t = threading.Thread(target=GenerateRandomNumber ,args=(i,))
threads.append(t)
t.start()
t.join()

if __name__ == '__main__':
main()
30 changes: 30 additions & 0 deletions QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_determine.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
"""
Created on Wed Apr 20 13:11:29 2022

@author: syiar
"""
import threading
import time
import random

def generate_random_A():
print (threading.currentThread().getName()+str( '--> mulai generate \n'))
time.sleep(2)
print (threading.currentThread().getName()+str('--> menghasilkan random number {} \n').format(random.randint(10, 100)))
return


if __name__ == "__main__":

t1 = threading.Thread(name='generate_random_A', target=generate_random_A)
t2 = threading.Thread(name='generate_random_B', target=generate_random_A)
t3 = threading.Thread(name='generate_random_C', target=generate_random_A)

t1.start()
t2.start()
t3.start()

t1.join()
t2.join()
t3.join()
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from threading import Thread
import random
import time
import os

class subclassThread (Thread):
def __init__(self, name):
Thread.__init__(self)
self.name = name
def run(self):
threads = list()
randomNumber = GenerateRandomNumber()
print("hasil generate random number {} dari operasi {}".format(randomNumber, self.name))
def GenerateRandomNumber():
listRandom = list()
for i in range(0,10):
listRandom.append(random.randint(10,100))
return listRandom

def main():
thread1 = subclassThread("Generate Random Number #1 \n")
thread2 = subclassThread("Generate Random Number #2 \n")

thread1.start()
thread2.start()

thread1.join()
thread2.join()

print("End")


if __name__ == "__main__":
main()




47 changes: 47 additions & 0 deletions QUIS SISTER 1/Muhammad Syiarul Amrullah/Threading_with_queue.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
""""Thread synchronisation with queue"""

from threading import Thread
from queue import Queue
import time
import random


class Antrian(Thread):

def __init__(self, queue):
Thread.__init__(self)
self.queue = queue

def run(self):
for i in range(2):
item = random.randint(0, 256)
self.queue.put(item)
print('Antrian menghasilkan : no antrian %d by %s \n'\
% (item, self.name))
time.sleep(1)


class Pengunjung(Thread):

def __init__(self, queue):
Thread.__init__(self)
self.queue = queue

def run(self):
while True:
item = self.queue.get()
print('Pengunjung mendapatkan : %d sebagai nomor antrian dari %s \n'\
% (item, self.name))
self.queue.task_done()

if __name__ == '__main__':
queue = Queue()

t1 = Antrian(queue)
t2 = Pengunjung(queue)

t1.start()
t2.start()

t1.join()
t2.join()
77 changes: 77 additions & 0 deletions QUIS SISTER 1/Muhammad Syiarul Amrullah/condition.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# -*- coding: utf-8 -*-
"""
Created on Wed Apr 20 11:44:06 2022

@author: syiar
"""

import logging
import threading
import time

LOG_FORMAT = '%(asctime)s %(threadName)-17s %(levelname)-8s %(message)s'
logging.basicConfig(level=logging.INFO, format=LOG_FORMAT)

fuel_tanks = []
condition = threading.Condition()


class Mesin(threading.Thread):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

def consume(self):

with condition:

if len(fuel_tanks) == 0:
logging.info('bensin telah habis')
condition.wait()

fuel_tanks.pop()
logging.info('mesin menghabiskan 1 liter bensin')

condition.notify()

def run(self):
for i in range(11):
time.sleep(2)
self.consume()


class Fuel_tanks(threading.Thread):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

def assign(self):

with condition:

if len(fuel_tanks) == 10:
logging.info('fuel tanks {}. sudah penuh'.format(len(fuel_tanks)))
condition.wait()

fuel_tanks.append(1)
logging.info('fuel tanks telah mengisi {}'.format(len(fuel_tanks)))

condition.notify()

def run(self):
for i in range(10):
time.sleep(0.5)
self.assign()


def main():
fuel_tanks = Fuel_tanks(name='tangki bensin')
mesin = Mesin(name='mesin')

fuel_tanks.start()
mesin.start()

fuel_tanks.join()
mesin.join()


if __name__ == "__main__":
main()
Loading