دستگرمی

دستگرمی دوازدهم

دستگرمی این هفته

با توجه به کد زیر، به سوال پاسخ دهید.

اجرای برنامه فوق حداقل چند ثانیه طول می‎کشد؟

  • 6 (57%, 4 رای)
  • 3 (14%, 1 رای)
  • 9 (14%, 1 رای)
  • 12 (14%, 1 رای)
  • 7 (0%, 0 رای)

مجموع رای ها: 7

Loading ... Loading ...

پاسخ:

پاسخ صحیح: ۷ ثانیه

توجه داشته باشید که متد sleep2، به صورت synchronized تعریف شده است و به این معنی است که در هر لحظه حداکثر یک نخ می‎تواند این متد را اجرا کند.

اگر نخ اول را t0 و نخ دوم را t1 در نظر بگیریم،

در ثانیه اول، به ازای j=0 ، هر دو نخ، متد sleep1 را هم‌زمان اجرا می‌کنند.

در ثانیه دوم، همان‌طور که اشاره شد، چون متد sleep2 به صورت synchronized تعریف شده، تنها یکی از دو نخ t0 و t1 می‌تواند این متد را اجرا کند. مثلا فرض کنید نخ t0 موفق می‎شود sleep2 را اجرا کند و نخ t1 باید یک ثانیه منتظر بماند تا بتواند سراغ این متد برود.

در ثانیه سوم، نخ t0 به ازای j=1، مجددا متد sleep1 را فراخوانی می‌کند و نخ t1 هم به ازای j=0، موفق می‌شود بالاخره sleep2 را فراخوانی کند.

در ثانیه چهارم، نخ t1 به ازای j=1، مجددا متد sleep1 را فراخوانی می‌کند و نخ t0 هم به ازای j=1، موفق می‌شود sleep2 را فراخوانی کند.

در ثانیه پنجم، نخ t0 به ازای j=2، مجددا متد sleep1 را فراخوانی می‌کند و نخ t1 هم به ازای j=1، موفق می‌شود sleep2 را فراخوانی کند.

در ثانیه ششم، نخ t1 به ازای j=2، مجددا متد sleep1 را فراخوانی می‌کند و نخ t0 هم به ازای j=2، موفق می‌شود sleep2 را فراخوانی کند.

در ثانیه هفتم، سرانجام نخ t1 به ازای  j=2، متد sleep2 را فراخوانی کرده و اجرای برنامه به پایان می‎رسد.

ثانیه اول

t0.sleep1

t1.sleep1

ثانیه دومt0.sleep2
ثانیه سوم

t0.sleep1

t1.sleep2

ثانیه چهارم

t0.sleep2

t1.sleep1

ثانیه پنجم

t0.sleep1

t1.sleep2

ثانیه ششم

t0.sleep2

t1.sleep1

ثانیه هفتمt1.sleep2

.

.

.

با ما همراه باشید

آدرس کانال تلگرام: JavaCupIR@

آدرس اکانت توییتر: JavaCupIR@

آدرس صفحه اینستاگرام: javacup.ir

آدرس گروه لینکدین: Iranian Java Developers

[تعداد: 1    میانگین: 5/5]
برچسب ها
نمایش بیشتر

نوشته های مشابه

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید

بستن
دکمه بازگشت به بالا