PDA

View Full Version : سوال: خطای contextswitch deadlock



niloofar13
شنبه 14 تیر 1393, 12:31 عصر
سلام من در برنامم لیستی از اشیا دارم که به صورت پویا و در یک حلقه for پر می شود. لازم است در این حلقه بررسی شود که اگر شی موردنظر قبلا در لیست درج شده دیگر درج نشده و متغییری مربوط به آن شی افزایش یابد. برای این کار از توابع list.find و list.indexof استفاده کرده ام چون این دو تابع زمان اجرای کندی دارند تصمیم گرفتم از یک hashtable استفاده کنم که کلید آن مقداری از شی و مقدار آن محل قرارگیری آن شی در لیست است تا بدینصورت سرعت را افزایش دهم. اما به محض اضافه کردن این کد به برنامه, دیگه برنامه اجرا نشد و در هر اجرا پیغام ContextSwitchDeadlock was detected را داد. البته من در برنامم از یک hashtable دیگه هم استفاده کردم . لطفا راهنمایی ام کنید که مشکل از چیه و چرا این خطا رو میده؟ البته به محض اینکه برنامه را به حالت قبلی برمیگردونم جواب میده ولی چون سرعت برنامه پایینه و می خوام افزایش بدم دوست دارم دو تابع list.find و list.indexof را حذف کنم .

plus
شنبه 14 تیر 1393, 12:39 عصر
چطور فکر میکنید سرعت جستجوی کلید در HashTable با سرعت IndexOf و Find متفاوت هست؟ لیست برای جستجو از Equals اشیاء استفاده میکنه (که در نهایت باید به مقایسه کلیدها منجر بشه).
به نظر میاد هر دو از (O(n باشن مگه اینکه HashTable از نوع Sorted باشه.

niloofar13
شنبه 14 تیر 1393, 13:00 عصر
من در اینترنت سرچ کردم تابع hashtable.containskey از (1)O است

plus
شنبه 14 تیر 1393, 13:45 عصر
فکر نمیکنم اینطور باشه...