שלום, שאלה למומחי Java..

DarkSwell

New member
שלום, שאלה למומחי Java..

אני אסביר את המצב ולאחר מכן הבעיה.. יצרתי מחלקה, הוגדר בה מערך סטטי, יצרתי מופע מהמחלקה על השרת בקובץ JSP, מכיוון שמתבצעות פעולות על המערך הסטטי מלקוחות שונים אז רציתי "לנעול" את המשתנה בפעולות מסוימות, בקיצור אני משתמש בנעילה Synchronized מה שאני שואל הוא האם שהאוביקט נעול אז פניה נוספת מחכה באופן אוטומטי או שפשוט מדלגת, דוגמא יש קטע בו אני מבטל תא במערך אז נניח שהקטע הופעל ע"י לקוח X, לקוח Y שהפעיל את אותו קטע בזמן שX לא סיים כלומר הקטע תפוס עבור X, האם הפעולה של לקוח Y תבוטל, או שמתבצע עיקוב עד שX יסיים.? מי שבאמת יודע ומנוסה, תודה.
 

אלדד28

New member
מתבצע עיכוב,

synchronized גורם לכל thread להמתין עד שה-thread הנוכחי ייצא מהקטע המסונכרן. יכולות כמובן להתעורר בעיות אחרות, בגלל timeout-ים שונים, אבל זה כבר תלוי במימוש שלך את התקשורת. נגיד, יכול להיות שלקוח שמחכה כבר 10 שניות יתייאש ויסגור את ה-socket (סתם דוגמה). את זה רק אתה יודע.
 

GPhoenixX

New member
זה מקביל לmutex בcpp ?

אם כן אז מתבצע עיכוב ... בכל מקרה אני רוצה לדעת אם זה מקביל :>
 

אלדד28

New member
אין כזה דבר "mutex ב-cpp".

mutex יש במערכת הפעלה. ב-WIN32 יש MUTEX ויש אמצעי סינכרון אחרים, ב-Linux יש pthread_mutex ונכנסים futex-ים ויש אמצעי סינכרון אחרים. אין קשר ל-CPP. אגב, אם כבר, אז כל הפקודות (גם ב-WIN32 וגם ב-Linux) הן פונקציות C, ולא ++C. Synchronized ב-JAVA יותר דומה ל-Critical Section ב-WIN32, אם כי זה לא בדיוק אותו הדבר. אתה יכול להגדיר פונקציה מסוימת בתור synchronized ואז לא תוכל להיכנס לתוכה משני thread-ים שונים. Mutex-ים הם הרבה, הרבה יותר מתוחכמים, גם כי יש לך מודעות לקיומו של mutex, גם כי אתה יכול לברר עליו נתונים, אתה יכול לשתף אותו בין אפליקציות וכו'.
 

GPhoenixX

New member
תודה על המידע :)

כמו שודאי ניחשת, אני לא יודע יותר מדי על mutexים, אני רק משתמש בהם כדי לנעול גישה למשתנים שאני מתעסק איתם ב2 threadים , השכלתי ^^
 

אלדד28

New member
כדאי שתקרא עוד,

כי יכול להיות שאתה יכול להשתמש ב-Critical Section במקום ב-Mutex, וזה הרבה יותר מהיר.
 
למעלה