না, যতক্ষণ না আপনি একই জিনিসটিতে লক করছেন। পুনরাবৃত্তির কোডটিতে কার্যকরভাবে ইতিমধ্যে লক রয়েছে এবং তাই নির্বিঘ্নে চালিয়ে যেতে পারে।
lock(object) {...}
মনিটরের ক্লাস ব্যবহারের জন্য সংক্ষিপ্তকরণ । মার্ক যেমন উল্লেখ করেছে , পুনরায় প্রবেশেরMonitor
অনুমতি দেয় , সুতরাং বর্তমান থ্রেডটিতে ইতিমধ্যে একটি লক রয়েছে এমন কোনও জিনিসটিতে লক করার পুনরাবৃত্তি প্রচেষ্টা ঠিক কাজ করবে।
আপনি যদি বিভিন্ন অবজেক্টে লক করা শুরু করেন , তখনই আপনাকে সতর্কতা অবলম্বন করতে হবে। বিশেষ মনোযোগ দিন:
- সর্বদা একই ক্রমে প্রদত্ত সংখ্যক বস্তুর উপর লকগুলি অর্জন করুন।
- আপনি কীভাবে এটি অর্জন করেন তার বিপরীত ক্রমে সর্বদা লকগুলি ছেড়ে দিন ।
আপনি যদি এই নিয়মগুলির কোনও একটি ভঙ্গ করেন তবে আপনি কোনও সময়ে ডেডলক সমস্যাগুলি পাওয়ার পক্ষে যথেষ্ট গ্যারান্টিযুক্ত ।
.NET: //dotnetdebug.net/2005/07/20/monitor-class-avoider-deadlocks/ এ থ্রেড সিঙ্ক্রোনাইজেশন বর্ণনা করার জন্য একটি ভাল ওয়েবপৃষ্ঠা এখানে রয়েছে
এছাড়াও, একসাথে যতগুলি সম্ভব অবজেক্ট লক করুন। যেখানে সম্ভব সেখানে মোটা দানাদার লকগুলি প্রয়োগ করার বিষয়টি বিবেচনা করুন । ধারণাটি হ'ল আপনি যদি নিজের কোডটি এমনভাবে লিখতে পারেন যে কোনও অবজেক্ট গ্রাফ রয়েছে এবং আপনি সেই বস্তুর গ্রাফের মূলটিতে লকগুলি অর্জন করতে পারেন, তবে এটি করুন। এর অর্থ এই যে রুট অবজেক্টটিতে আপনার একটি লক রয়েছে এবং তাই আপনি যে ক্রমটি লকগুলি অর্জন / প্রকাশ করেছেন তা সম্পর্কে এতটা চিন্তা করার দরকার নেই।
(আরও একটি নোট, আপনার উদাহরণটি প্রযুক্তিগতভাবে পুনরাবৃত্ত নয় it এটি পুনরাবৃত্ত হওয়ার Bar()
জন্য, সাধারণত নিজেকে পুনরাবৃত্তির অংশ হিসাবে কল করতে হবে))