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/Deriska Fadilla M/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_absensi = 3
hasilakhir = Barrier(num_absensi)
nama = ['deriska', 'nur', 'ayu']

def mahasiswa():
name = nama.pop()
sleep(randrange(1, 5))
print('%s input absen pada: %s \n' % (name, ctime()))
hasilakhir.wait()

def main():
threads = []
print('mulai berangkat!!')
for i in range(num_absensi):
threads.append(Thread(target=mahasiswa))
threads[-1].start()
for thread in threads:
thread.join()
print('berhasil absen!')

if __name__ == "__main__":
main()
70 changes: 70 additions & 0 deletions QUIS SISTER 1/Deriska Fadilla M/Condition.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
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 Pembeli(threading.Thread):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

def beli(self):

with condition:

if len(items) > 6 and len(items) < 9:
logging.info('tidak ada yang bisa di beli')
condition.wait()

items.pop()
logging.info('beli 1 mangga')

condition.notify()

def run(self):
for i in range(10):
time.sleep(2)
self.beli()


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

def membuat(self):

with condition:

if len(items) == 10:
logging.info('mangga diproses {}. berhenti'.format(len(items)))
condition.wait()

items.append(1)
logging.info('total mangga {}'.format(len(items)))

condition.notify()

def run(self):
for i in range(15):
time.sleep(0.5)
self.membuat()


def main():
penjualsedang = Penjualsedang(name='penjualsedang')
pembeli = Pembeli(name='pembeli')

penjualsedang.start()
pembeli.start()

penjualsedang.join()
pembeli.join()


if __name__ == "__main__":
main()
47 changes: 47 additions & 0 deletions QUIS SISTER 1/Deriska Fadilla M/Event.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
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 Consumer(threading.Thread):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

def run(self):
while True:
time.sleep(2)
event.wait()
item = items.pop()
logging.info('Consumer notify: {} popped by {}'\
.format(item, self.name))

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

def run(self):
for i in range(5):
time.sleep(2)
item = random.randint(0, 10)
items.append(item)
logging.info('Producer notify: item {} appended by {}'\
.format(item, self.name))
event.set()
event.clear()

if __name__ == "__main__":
t1 = Producer()
t2 = Consumer()

t1.start()
t2.start()

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

class MyPasien (Thread):
def __init__(self, name, duration):
Thread.__init__(self)
self.name = name
self.duration = duration
def run(self):
print ("---> " + self.name + \
" pasien diberikan no daftar "\
+ str(os.getpid()) + "\n")
time.sleep(self.duration)
print ("---> " + self.name + " over\n")


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

# Thread Creation
thread1 = MyPasien("no daftar pasien ", randint(1,10))
thread2 = MyPasien("no daftar pasien", randint(1,10))


# Thread Running
thread1.start()
thread2.start()


# Thread joining
thread1.join()
thread2.join()


# End
print("End")

#Execution Time
print("--- %s seconds ---" % (time.time() - start_time))


if __name__ == "__main__":
main()




51 changes: 51 additions & 0 deletions QUIS SISTER 1/Deriska Fadilla M/MyThreadClass_lock.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import threading
import time
import os
from threading import Thread
from random import randint

# Lock Definition
threadLock = threading.Lock()

class MyPasien (Thread):
def __init__(self, name, duration):
Thread.__init__(self)
self.name = name
self.duration = duration
def run(self):
print ("---> " + self.name + \
" pasien diberikan no daftar "\
+ str(os.getpid()) + "\n")
time.sleep(self.duration)
print ("---> " + self.name + " penuh\n")


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

# Thread Creation
thread1 = MyPasien("no daftar pasien ", randint(1,5))
thread2 = MyPasien("no daftar pasien", randint(1,5))


# Thread Running
thread1.start()
thread2.start()


# Thread joining
thread1.join()
thread2.join()


# End
print("End")

#Execution Time
print("--- %s seconds ---" % (time.time() - start_time))


if __name__ == "__main__":
main()


60 changes: 60 additions & 0 deletions QUIS SISTER 1/Deriska Fadilla M/Rlock.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import threading
import time
import random


class BoxMangga:
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 adder(boxmangga, items):
print("Banyaknya mangga {} yang ditambahkan \n".format(items))
while items:
boxmangga.add()
time.sleep(1)
items -= 1
print("stok buah mangga saat ini -->{} buah \n".format(items))



def remover(boxmangga, items):
print("banyaknya mangga {} yang di jual \n".format(items))
while items:
boxmangga.remove()
time.sleep(1)
items -= 1
print("mangga yang dijual -->{} buah \n".format(items))


def main():
items = 12
box = BoxMangga()

t1 = threading.Thread(target=adder, \
args=(box, random.randint(10,20)))
t2 = threading.Thread(target=remover, \
args=(box, 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/Deriska Fadilla M/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)
jumlah = 0


def pemenangarisan():
logging.info('pengocokan arisan dimulai peserta harap menunggu')
semaphore.acquire()
logging.info('pemenang arisan dengan nomor {} harap dapat datang ke tempat'.format(jumlah))


def nomorarisan():
global jumlah
time.sleep(3)
jumlah = random.randint(1, 10)
logging.info('nomor {} adalah pemenang arisan'.format(jumlah))
semaphore.release()


def main():
for i in range(1):
t1 = threading.Thread(target=pemenangarisan)
t2 = threading.Thread(target=nomorarisan)

t1.start()
t2.start()

t1.join()
t2.join()


if __name__ == "__main__":
main()
17 changes: 17 additions & 0 deletions QUIS SISTER 1/Deriska Fadilla M/Thread_definition.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import threading


def my_func(thread_number):
return print('ayank dimana? {}'.format(thread_number))


def main():
threads = []
for i in range(7):
t = threading.Thread(target=my_func, args=(i,))
threads.append(t)
t.start()
t.join()

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