স্পিন লক এবং সেমফোরের মধ্যে পার্থক্য কী?


15

পদক্ষেপে স্পিন লক এবং সেমফোরের মধ্যে মৌলিক পার্থক্যগুলি কী কী?



@ গিলস আমি এটির দিকেও নজর দিয়েছি, কিন্তু পৃষ্ঠায় কেবলমাত্র সেমফোরের উল্লেখই ওয়ারেন মন্তব্য করেছেন যে "যদি কেউ কোনও স্পিন লক এবং বলতে বলতে একটি সেমফোরের মধ্যে পার্থক্য জানতে চায় তবে এটি আলাদা প্রশ্ন।"
মাইকেল মরোজেক

@ মিশেল: ঠিক আছে, আমি মনে করি যে উত্তরগুলি এখানে মূল বিষয়টিকে সম্বোধন করেছে, তবে আপনি ঠিক বলেছেন যে কোনওটিই স্পষ্ট করে বলেনি যে সেমফোরগুলি অন্যান্য ধরণের লকগুলির মধ্যে একটি।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

লিনাস টরভাল্ডস দ্বারা ব্যাখ্যা: yarchive.net/comp/linux/semaphores.html
মায়াট

স্ট্যাকওভারফ্লো ডব্লিকেট / প্রশ্নগুলি / ১৯৫৮৫ / স্পিনলক - ওভারসাস- সেমোফোর আমার জিজ্ঞাসা করা থ্রেডে অনেকগুলি ভাল ব্যাখ্যা উপস্থিত রয়েছে।
ইয়ানকিটস

উত্তর:


13

উভয়ই একটি সীমিত সংস্থান পরিচালনা করে। আমি প্রথমে বাইনারি সেম্যাফোর (মিটেক্স) এবং স্পিন লকের মধ্যে পার্থক্য বর্ণনা করব।

স্পিন লকগুলি একটি ব্যস্ত সময় অপেক্ষা করে - অর্থাত এটি লুপটি চালিয়ে যায়:

while (try_acquire_resource ());
...
release();

এটি খুব লাইটওয়েট লকিং / আনলকিং সম্পাদন করে তবে যদি লকিং থ্রেডটি অন্যের দ্বারা প্রিম্প্ট হয়ে যায় যা একই পুনরায় স্থানটি অ্যাক্সেস করার চেষ্টা করবে তবে দ্বিতীয়টি কেবল সিপিইউ কোয়ান্টায় চালিত না হওয়া অবধি রিসোর্সটি খালাস করার চেষ্টা করবে।

অন্যদিকে মিটেক্স আরও বেশি আচরণ করে:

if (!try_lock()) {
    add_to_waiting_queue ();
    wait();
}
...
process *p = get_next_process_from_waiting_queue ();
p->wakeUp ();   

সুতরাং থ্রেড যদি অবরুদ্ধ সম্পদ অর্জনের চেষ্টা করে তবে এটি তার জন্য উপলব্ধ না হওয়া অবধি স্থগিত থাকবে। লক করা / আনলক করা অনেক বেশি ভারী তবে অপেক্ষারটি 'ফ্রি' এবং 'ফেয়ার'।

সেম্যাফোর এমন একটি লক যা একাধিকবার (ইনিশিয়েশন থেকে জানা যায়) ব্যবহারের অনুমতি দেওয়া হয় - উদাহরণস্বরূপ 3 টি থ্রেড একসাথে সংস্থানটি ধরে রাখার অনুমতি দেওয়া হয় তবে আরও কিছু হয় না। এটি উদাহরণস্বরূপ উত্পাদক / গ্রাহক সমস্যা বা সাধারণভাবে সারিতে ব্যবহৃত হয়:

P(resources_sem)
resource = resources.pop()
...
resources.push(resources)
V(resources_sem)

ভাল ব্যাখ্যা, আমি শুধু একটি বিষয় জোর দিতে চাই। সেমফোর বনাম মুটেেক্স একটি ইন্টারফেসের বিষয়: একটি মিটেক্স রাখা হয় বা না হয়, যখন একটি সেমফোর এন থ্রেড পর্যন্ত ধরে থাকে; একটি মিউটেক্স হ'ল এন = 1 সহ সমুদ্রের ক্ষেত্রগুলির একটি বিশেষ কেস। স্পিনলক বনাম অন্যান্য ধরণের লক বাস্তবায়নের বিষয়: একটি স্পিনলক লকটি অর্জন করার চেষ্টা চালিয়ে যায়, অন্যদিকে প্রকারের কোনও বিজ্ঞপ্তির জন্য অপেক্ষা করে। একটি লিনাক্স কার্নেল প্রসঙ্গে, স্পিন প্রয়োগের সাথে একমাত্র লকের কাছে একটি মিউটেক্স ইন্টারফেস রয়েছে।
গিলস 'দু: খিত হওয়া বন্ধ করুন'

একটি লিনাক্স কার্নেল প্রসঙ্গে, স্পিন প্রয়োগের সাথে একমাত্র লকের কাছে একটি মিউটেক্স ইন্টারফেস রয়েছে। আমি এই লাইন বুঝতে পারি না। আপনি কি এটিতে প্রসারিত করতে পারেন?
সেন

@ সেন: তার অর্থ লিনাক্সের স্পিন লকটি বাইনারি আচরণ করে (এটি লক হয়েছে বা না)। স্পিনিং লকটি সেম্যাফোর হিসাবে আচরণ করা সম্ভব।
ম্যাকিয়েজ পাইচোটকা

"তবে যদি লকিংয়ের থ্রেডটি অন্যের দ্বারা প্রিম্প্ট হয়ে যায় যা একই পুনরায় স্থানটি অ্যাক্সেস করার চেষ্টা করবে তবে দ্বিতীয়টি কেবল সিপিইউ কোয়ান্টা না চালিয়ে রিসোর্সটি খালাস করার চেষ্টা করবে।": তবে একটি সমস্যা এখনও মুটেক্সের কাছে থেকে যায়। যদি আরও অগ্রাধিকার সহ কোনও কাজের জন্য সংস্থানটি অ্যাক্সেস করার প্রয়োজন হয় ... এটি কি কেবল সারিযুক্ত? বিভিন্ন অগ্রাধিকারের সাথে কার্যগুলির মধ্যে ভাগ করে নেওয়া সংস্থানগুলি বাতিল করা ভাল।
Hibou57

@ হিবিউ ৫7: হ্যাঁ এটিকে অবরুদ্ধ করা হয়েছে কারণ রাজ্যটি সামঞ্জস্যপূর্ণ নয় এবং সংস্থানটি ব্যবহার করে 'মজাদার' প্রভাব ফেলতে পারে (বলুন নিম্ন লিখিত থ্রেডটি যুক্ত লিঙ্কে / থেকে কিছু যুক্ত করার বা অপসারণের মাঝখানে ছিল)। এই বক্তব্যের মূল বক্তব্যটি ছিল যে থ্রেডটি ব্লক করা থাকলে এটি নির্ধারিত নয় সুতরাং স্পিনলকের অপেক্ষায় থ্রেড অপেক্ষা করার সময় এটি সংস্থান গ্রহণ করে না। রিয়েল-টাইম সিস্টেমগুলির জন্য লক করা (বিশেষত হার্ড) আলাদা বিষয় এবং এর উত্তর দেওয়ার মতো পর্যাপ্ত জ্ঞান আমার কাছে নেই - তবে এই সিস্টেমটি মাঝে মাঝে অগ্রাধিকার দান বা অন্যান্য কৌশল প্রয়োগ করে।
ম্যাকিয়েজ পাইচোটকা

2

স্পিনলকগুলি একটি বাধাপ্রাপ্ত প্রসঙ্গে ব্যবহৃত হয়, যেখানে ঘুমানোর অনুমতি নেই। তারা শক্ত লুপে পোল করে, সংস্থান প্রাপ্ত না হওয়া পর্যন্ত অন্য কিছুই করে না। বেশিরভাগ আইএসআরগুলিতে ব্যবহৃত হয় এবং আরও সুরক্ষিত এবং দক্ষ।

Semaphores একটি প্রক্রিয়া প্রসঙ্গে ব্যবহার করা যেতে পারে, যেখানে ঘুম ঠিক আছে।


1

এখানে একটি উত্তরে আমার দ্রুত শট দেওয়া হয়েছে: একটি স্পিন লক এবং একটি বাইনারি সেম্যাফোর (যা একটি উত্স পরিচালনা করে যা কেবলমাত্র একটি জিনিস দ্বারা ব্যবহৃত হতে পারে) প্রায় অভিন্ন। তাদের পার্থক্য হ'ল স্পিন লকগুলি চালনার জন্য কোড পরিচালনা করে যখন বাইনারি সেমফোরগুলি একক একক একক সংস্থান (যেমন সিপিইউ সময়, প্রদর্শন আউটপুট) পরিচালনা করে

একটি নিয়মিত সেমফোর যাইহোক, এমন একটি উত্স অ্যাক্সেসের মাধ্যমে কয়েকটি থ্রেড পরিচালনা করতে সক্ষম যা বেশ কয়েকটিতে বিভক্ত হতে পারে তবে সীমাবদ্ধ (যেমন মেমরি, নেটওয়ার্ক ব্যান্ডউইথ)

সংক্ষেপে, একটি স্পিন-লক সম্ভবত কোনও সেমফোরটি জিজ্ঞাসা করে যদি এটি কোনও সংস্থান ব্যবহার করতে পারে তবে জিজ্ঞাসা করতে পারে। (কল্পনা করুন যে কোনও শিশু বাথরুমটি ব্যবহার করতে হবে এবং অন্য কারও জন্য অপেক্ষা করছে))

উত্স: সিস্টেমস প্রোগ্রামিং, অপারেটিং সিস্টেম এবং উইকিপিডিয়া পরিচিতি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.