এটি কীভাবে লক প্রয়োগ করা হয় তার উপর নির্ভর করে। আপনি যদি উইকিপিডিয়া নিবন্ধের মতো এটি করেন, যেমন প্রক্রিয়া প্রতি এক বুলিয়ান দিয়ে সমালোচনামূলক বিভাগটি রক্ষা করেন you তবে আপনি অবশ্যই সমস্যায় পড়েছেন। যদি একটি প্রক্রিয়া মারা যায় তবে এটি কখনও তার পতাকাটিকে পুনরায় সেট করে না তাই অন্য প্রক্রিয়া চিরকালের জন্য লুপ হয়ে যায়।
অনুশীলনে, আপনি আপনার কোডটি মারা যাওয়ার বিভিন্ন উপায়ের বিরুদ্ধে রক্ষা করতে পারেন। উদাহরণস্বরূপ, জাভা-শৈলীর এই প্রয়োগটি নিন:
flag[1] = true;
turn = 1;
while ( flag[0] == true && turn == 1 ) { Thread.yield(); }
try {
// critical section
}
finally {
flag[1] = false;
}
এটি ত্রুটিপূর্ণ বিভাগে যা ঘটবে ততক্ষণ পতাকাটি পুনরায় সেট করা হবে তা নিশ্চিত করবে, যতক্ষণ না সিস্টেম ত্রুটি পরিচালনা করে। জাভাতে, এটি স্ট্যাক এবং হিপ ওভারফ্লোগুলির জন্যও সত্য। সুতরাং প্রক্রিয়াটি আক্ষরিক অর্পণ না হলে ( kill
², প্রসেসরের ব্যর্থতা, নেটওয়ার্ক সংযোগ বিচ্ছিন্ন, ...) আপনি নিরাপদ। মনে রাখবেন যে বেশিরভাগ অ-সমালোচক সফ্টওয়্যার এই ক্ষেত্রে ব্যর্থ হয় - এটি যে ত্রুটিটি এটি চালাচ্ছে না তা কীভাবে পরিচালনা করতে পারে? - তাই অনেক ক্ষেত্রেই তা গ্রহণ করতে হয়। প্রয়োজনে পুনরায় আরম্ভ করার পরে আপনি অসঙ্গতিগুলি পরিচালনা করতে পারেন।
আপনি যদি যথাযথ, ভাষা-স্তরের লক ব্যবহার করেন তবে রানটাইম সিস্টেমটি নিখোঁজ লক মালিকদের পরিচালনা করতে পারে, অর্থাত মৃত মালিকদের সাথে তালাবদ্ধ করে। আপনি প্রতিটি প্রক্রিয়াটিকে একজন মৃত ব্যক্তির স্যুইচ দিয়ে অন্যরা পড়তে পারেন বা তা লক মালিকানার প্রক্রিয়াটি এখনও জীবিত আছে কিনা তা সরাসরি পরীক্ষা করতে পারেন (যদি সিস্টেম এটি সমর্থন করে)।
- যাইহোক, যে ভাল স্কেল না।
- জাভাতে, আমি মনে করি
finalize
এমনকি চালানো উচিত kill
, তবে এটি অনুমান দ্বারা গ্যারান্টিযুক্ত হয় না। kill -9
সম্ভবত কোনও সমাধানের জন্য মৃত্যুদণ্ড যা মরণ প্রক্রিয়াটিকে কিছু করার প্রয়োজন হয়।