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
29 changes: 29 additions & 0 deletions QUIS SISTER 1/Faisal Abdullah/Barrier.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from random import randrange
from threading import Barrier, Thread
from time import ctime, sleep

num_mhs = 3
b = Barrier(num_mhs)
mhs = ['Ahmad', 'Alwi', 'Abdul']

# barrier = barrier digunakan untuk memblock semua thread,kemudian melepas semua untuk execute secara bersamaan

def runner():
name = mhs.pop()
sleep(randrange(2, 10))
print('%s Berangkat kuliah pada: %s ' % (name, ctime()))
b.wait()
print('%s Pulang kuliah pada: %s ' % (name, ctime()))

def main():
threads = []
print('Gas kuliah!!!!')
for i in range(num_mhs):
threads.append(Thread(target=runner))
threads[-1].start()
for thread in threads:
thread.join()
print('Udah pada balik!')

if __name__ == "__main__":
main()
73 changes: 73 additions & 0 deletions QUIS SISTER 1/Faisal Abdullah/Condition.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import logging
import threading
import time

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

items = []
condition = threading.Condition()



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

def pakai(self):

with condition:

if len(items) == 0:
logging.info('Tidak ada barang yang dapat dibeli')
condition.wait()

items.pop()
logging.info('Kamu membeli 1 barang')

condition.notify()


def run(self):
for i in range(20):
time.sleep(2)
self.pakai()


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

def jual(self):

with condition:

if len(items) == 10:
logging.info('Di etalase terdapat {} item. Tidak cukup tempat. Produksi berhenti sementara'.format(len(items)))
condition.wait()

items.append(1)
logging.info('Terdapat {} barang saat ini'.format(len(items)))

condition.notify()


def run(self):
for i in range(20):
time.sleep(0.5)
self.jual()


def main():
kosumen = Pabrik(name='Pabrik')
pabrik = Kosumen(name='Kosumen')

pabrik.start()
kosumen.start()

pabrik.join()
kosumen.join()


if __name__ == "__main__":
main()
54 changes: 54 additions & 0 deletions QUIS SISTER 1/Faisal Abdullah/Event.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
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)


items = []
event = threading.Event()


class Japati(threading.Thread):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.name = "Japati"


def run(self):
while True:
time.sleep(2)
event.wait()
item = items.pop()
logging.info('Menerima surat dari No {} dikirim dengan menggunakan {} ke tujuan'.format(item, self.name))


class Pengirim(threading.Thread):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.name = "Pengirim Surat"


def run(self):
for i in range(5):
time.sleep(2)
item = random.randint(0, 100)
items.append(item)
logging.info('Pengirim surat di alamat {} di buat oleh {}'.format(item, self.name))
event.set()
event.clear()


if __name__ == "__main__":
t1 = Pengirim()
t2 = Japati()


t1.start()
t2.start()


t1.join()
t2.join()
30 changes: 30 additions & 0 deletions QUIS SISTER 1/Faisal Abdullah/MyTheradClass_lock2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import threading
import time

konci2 = threading.Lock()
#lock = digunakan untuk block sebuah thread untuk melakukan execute sebelum thread lain beres
#lock2 = posisi dari method release() yang diubah akan mempengaruhi output

def orang_pertama(konci2):
konci2.acquire()
print('orang - 1 sedang menggunakan kamar mandi')
time.sleep(1)
print('orang - 1 sudah selesai')
# konci2.release()

def orang_kedua(konci2):
# konci2.acquire()
print('orang - 2 sedang menggunakan kamar mandi')
konci2.release()
time.sleep(1)
print('orang - 2 sudah selesai')


t1 = threading.Thread(target=orang_pertama, args=(konci2, ))
t2 = threading.Thread(target=orang_kedua, args=(konci2, ))

t1.start()
t2.start()

t1.join()
t2.join()
43 changes: 43 additions & 0 deletions QUIS SISTER 1/Faisal Abdullah/MyThreadClass.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from threading import Thread
import threading
import time
from random import randint





class ThreadClass(Thread):

def __init__(self, name, duration):
Thread.__init__(self)
self.name = name
self.duration = duration

def run(self):
print("{} execute ketika: {}".format(threading.current_thread().getName(), time.ctime()))
time.sleep(self.duration)
print("{} lanjut ketika: {}".format(threading.current_thread().getName(), time.ctime()))

def main():
start_time = time.time()

t1 = ThreadClass('T-1', randint(1,11))
t2 = ThreadClass('T-2', randint(1,11))
t3 = ThreadClass('T-3', randint(1,11))


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

t1.join()
t2.join()
t3.join()

print('beres')

print("diexcecute selama : %s detik " % (time.time() - start_time))

if __name__ == "__main__":
main()
28 changes: 28 additions & 0 deletions QUIS SISTER 1/Faisal Abdullah/MyThreadClass_lock.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import threading
import time

konci = threading.Lock()
#lock = digunakan untuk block sebuah thread untuk melakukan execute sebelum thread lain beres

def orang_pertama(konci):
konci.acquire()
print('orang - 1 sedang menggunakan kamar mandi')
time.sleep(1)
print('orang - 1 sudah selesai')
konci.release()

def orang_kedua(konci):
konci.acquire()
print('orang - 2 sedang menggunakan kamar mandi')
time.sleep(1)
print('orang - 2 sudah selesai')
konci.release()

t1 = threading.Thread(target=orang_pertama, args=(konci, ))
t2 = threading.Thread(target=orang_kedua, args=(konci, ))

t1.start()
t2.start()

t1.join()
t2.join()
55 changes: 55 additions & 0 deletions QUIS SISTER 1/Faisal Abdullah/Queue.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
""""Thread synchronisation with queue"""

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


class Japati(Thread):
def __init__(self, queue):
Thread.__init__(self)
self.queue = queue
self.name = 'Japati'



def run(self):
for i in range(5):
item = random.randint(0, 256)
self.queue.put(item)
print('Menerima surat dari No {} dikirim dengan menggunakan {} ke tujuan'.format(item, self.name))
time.sleep(1)


class Pengirim(Thread):
def __init__(self, queue):
Thread.__init__(self)
self.queue = queue
self.name = 'Pengirim'


def run(self):
while True:
item = self.queue.get()
print('Pengirim surat di alamat {} di buat oleh {}'.format(item, self.name))
self.queue.task_done()


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

t1 = Japati(queue)
t2 = Pengirim(queue)
t3 = Pengirim(queue)
t4 = Pengirim(queue)

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

t1.join()
t2.join()
t3.join()
t4.join()
59 changes: 59 additions & 0 deletions QUIS SISTER 1/Faisal Abdullah/Rlock.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import threading
import time
import random

class Kelas:
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 aula(box, items):
print("mahasiswa sebanyak {} orang harus keluar kelas dan berkumpul di aula \n".format(items))
while items:
box.add()
time.sleep(1)
items -= 1
print("Satu mahasiswa sampai di aula -->{} mahasiswa yang harus ke aula \n".format(items))



def kelas(box, items):
print("Jumlah mahasiswa {} yang tidak berangkat ke aula \n".format(items))
while items:
box.remove()
time.sleep(1)
items -= 1
print("mahasiswa izin tidak kelapangan -->{} mahasiswa yang tidak ke aula \n".format(items))


def main():
items = 10
box = Kelas()

t1 = threading.Thread(target=aula, \
args=(box, random.randint(10,20)))
t2 = threading.Thread(target=kelas, \
args=(box, random.randint(1,10)))

t1.start()
t2.start()


t1.join()
t2.join()


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