منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
اريد كود لهذا السيناريو - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90)
+--- قسم : مكتبة أكواد المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=111)
+--- الموضوع : اريد كود لهذا السيناريو (/showthread.php?tid=11211)



اريد كود لهذا السيناريو - المحسية بت محمد - 23-01-15

ارجوكم ساعدوني في كود لهذا السيناريو (علما تابع لكورس نظم التشغيل):
write a multithreaded program that implements bankers algorithm. several customers request and and release resources form the bank .the banker will grant a request only if it leaves the system in a safe state. Arequest that leaves the system in unsafe state will be denied


RE: اريد كود لهذا السيناريو - sanyor77 - 26-03-23

تفضلوا هذا هو الكود الذي ينفذ سيناريو Banker's Algorithm المطلوب:

from threading import Thread, Lock

# تعريف دالة لإيجاد نظام آمن
def is_safe_state(available, maximum, allocation, need):
work = available.copy()
finish = [False] * len(allocation)

# الحصول على الموارد المطلوبة
while True:
can_finish = False
for i in range(len(allocation)):
if not finish[i] and all(need[i][j] <= work[j] for j in range(len(available))):
can_finish = True
finish[i] = True
for j in range(len(available)):
work[j] += allocation[i][j]
if not can_finish:
break

return all(finish)

# تعريف دالة لتنفيذ طلب المورد
def request_resources(customer_id, request, available, maximum, allocation, need, lock):
lock.acquire()

# التحقق من أن الطلب يتناسب مع الحد الأقصى والمورد المتاح
if all(request[i] <= need[customer_id][i] for i in range(len(request))) and all(request[i] <= available[i] for i in range(len(request))):
# تجربة تخصيص المورد للعميل
for i in range(len(request)):
available[i] -= request[i]
allocation[customer_id][i] += request[i]
need[customer_id][i] -= request[i]

# التحقق من أن النظام آمن بعد تخصيص المورد
if is_safe_state(available, maximum, allocation, need):
print(f"الموارد المخصصة للعميل {customer_id} هي {request}")
else:
# العودة إلى الحالة الأصلية
for i in range(len(request)):
available[i] += request[i]
allocation[customer_id][i] -= request[i]
need[customer_id][i] += request[i]
print(f"الطلب المقدم من العميل {customer_id} ليس آمناً ولم يتم تخصيص المورد")
else:
print(f"الطلب المقدم من العميل {customer_id} يتعارض مع الحد الأقصى أو المورد المتاح ولم يتم تخصيص المورد")

lock.release()

# تعريف دالة لإطلاق المورد
def release_resources(customer_id, release, available, allocation, need, lock):
lock.acquire()

# تحرير المورد والتحقق من أنه لا يتعارض مع الحد الأقصى
if all(release[i] <= allocation[customer_id][i] for i in range(len(release))):
for i in range(len(release)):
available[i] += release[i]
allocation[customer_id][i] -= release[i]
need[customer