שאלה ב-busy waiting

matliv

New member
שאלה ב-busy waiting

שלום, אני מנסה לממש מנגנון של busy waiting בג'אווה עם שימוש בשני דגלים. משום מה אני מגיע לדדלוק ואני לא מבין למה.
אשמח אם מישהו יוכל לעזור. דרך אגב, הקוד לא ארוך כמו שהוא נראה, הוא ממוקד בבעיה.
 

Guy Yafe

New member
אין לך שום מנגנוני נעילה וסינכרון

האם זה כל הקוד?
 

matliv

New member
כן

נכון שאין לי מנגנוני סנכרון, אבל אני לא מצליח לחשוב על אפשרות של מעבר בין הת'רדים באף שלב שיוביל לדדלוק. בכל זאת זה נתקע...
האם גם במקרה כזה חייבים מנגנון סנכרון? אם כן, למה?

תודה!
 

ihovav

New member
תשתמש ב ReadWriteReentrantLock

לסנכרן כתיבה וקריאה על משתנים
 

Guy Yafe

New member
אם אין נעילות, אין דדלוקים

זה לא יכול להיות אחרת.
אם זה כל הקוד שלך, לדעתי מה שקרה הוא שלא עשית JOIN לתהליכונים והאםליקציה נסגרה מיד כשסיימת את הפונקציה הראשית, ובטעות בלבלת את זה עם דדלוק.
 

matliv

New member
זה לא נכון

ב-java אין חובה לעשות join במקרה כזה. התכנית מסתיימת רק כאשר כל ה-thread-ים שהם non-daemon מסתיימים. יש פה דדלוק.
 

matliv

New member
זה עובד, תודה!

אתה יכול להסביר בבקשה למה צריך להוסיף זאת רק לדגלים ולא למונה עצמו?
 
למעלה