কেন আপনি একটি semaphore পরিবর্তে একটি মনিটর ব্যবহার করবেন?


11

আমি বর্তমানে আমার বিশ্ববিদ্যালয়ের একযোগে প্রোগ্রামিং কোর্সে অংশ নিচ্ছি এবং আমরা সম্প্রতি একটি মনিটরের ধারণা সম্পর্কে কথা বলা শুরু করেছি। আমি পারস্পরিক বর্জনীয়তার প্রয়োজনীয়তাটি বুঝতে পারছি না কেন আমি কেন এটির জন্য একটি মনিটর ব্যবহার করব।

যেহেতু আমি এটি বুঝতে পারি, একজন মনিটর গ্যারান্টি দেয় যে ঠিক এক বা কোনও প্রক্রিয়া সর্বকালের সমালোচনামূলক বিভাগে রয়েছে। আমরা সেমফোর দিয়ে ঠিক তা অর্জন করতে পারি। তদুপরি আমরা semaphores সহ মনিটরগুলি প্রয়োগ করি (বা তাদের বাস্তবায়নের জন্য কমপক্ষে একটি সম্ভাবনা হ'ল)।

তাহলে কেন আমি এমন কিছু বাস্তবায়ন করব যা সেমফোরের সাথে একইভাবে একই কাজ করে? আমি কি সুবিধা পেতে পারি?

উত্তর:


8

এগুলি প্রায় বিনিময়যোগ্য এবং একটি অন্যটির থেকে তৈরি করা যায়। এটি কিছুটা ভাষা নির্ভর যা প্রয়োগ / পছন্দসই হয় (যেমন জাভা "সিঙ্ক্রোনাইজ" কীওয়ার্ড ব্যবহার করে মনিটরের অন্তর্নির্মিত)। তবে নীচের কারণ ও পার্থক্যের জন্য মনিটরের চেয়ে সেমফোরটিকে একটি "নিম্ন স্তরের" সত্তা হিসাবে বিবেচনা করা হচ্ছে:

উভয় মনিটর এবং সেম্যাফোর একই উদ্দেশ্যে ব্যবহৃত হয় - থ্রেড সিঙ্ক্রোনাইজেশন। তবে, মনিটররা সেমোফোরগুলির তুলনায় ব্যবহার করা সহজ কারণ তারা লক অর্জন এবং প্রকাশের সমস্ত বিবরণ পরিচালনা করে। সেমফোরস ব্যবহার করে একটি অ্যাপ্লিকেশনটির অ্যাপ্লিকেশনটি শেষ হয়ে গেলে থ্রেডের যে কোনও লক প্রকাশ করতে হবে - এটি অ্যাপ্লিকেশন নিজেই করতে হবে। যদি অ্যাপ্লিকেশন এটি না করে, তবে অন্য যে কোনও থ্রেডের ভাগ করা সংস্থান দরকার তা এগিয়ে যেতে সক্ষম হবে না।

সেমফোরস ব্যবহার করার সময় আর একটি পার্থক্য হ'ল একটি নিয়মিত অংশীদারি রিসোর্সে অ্যাক্সেস করা নিয়মিতভাবে রিসোর্সটি ব্যবহারের আগে স্পষ্টভাবে এএ লকটি অর্জন করতে হয়। মাল্টিথ্রেডিংয়ের সাথে কাজ করার রুটিনগুলিকে কোড করার সময় এটি সহজেই ভুলে যেতে পারে। মনিটররা, সেমফোরগুলির বিপরীতে, স্বয়ংক্রিয়ভাবে প্রয়োজনীয় লকগুলি অর্জন করে। [1]

উচ্চ ভোটপ্রাপ্ত স্ট্যাক ওভারফ্লো উত্তর সেমফোর বনাম মনিটরের দেখুনও - পার্থক্য কী? পাবলিক টয়লেট এবং সাইকেল স্ট্যান্ডগুলির দুর্দান্ত / স্মরণীয় উপমা সহ।


আমি মূলত সেমফোরগুলির সাথে আমি একই জিনিসটি করি, তবে পারস্পরিক বর্জনকে নিশ্চিত করার সময় আমি প্রোগ্রামারকে লকিং / আনলকিংয়ের প্রয়োজনীয়তা হ্রাস করি যা তাকে ইন্টারফেস দিয়ে ডেটা অ্যাক্সেস করতে (এবং কারসাজি করতে) অনুমতি দেয় while একটি সুবিধা হ'ল ক্লিনার কোড এবং কোডে সম্ভাব্য কম বাগগুলি হবে কারণ আপনি লক / আনলক করতে ভুলবেন না (ফলস্বরূপ সম্ভাব্য দূষিত ডেটা)। এটা সঠিক নাকি আমি কিছু মিস করছি?
ডেনিস হেইন

রেফারেন্সযুক্ত পাঠ্যটি বিভ্রান্তিমূলক বলছে, মনিটর ব্যবহার করার সময় লক অর্জন এবং ছেড়ে দেওয়ার কোনও দরকার নেই। জাভা সিঙ্ক্রোনাইজড কীওয়ার্ড ব্যবহার করার সময় এটি সত্য হতে পারে তবে এন.ইউইকিপিডিয়া.আর / উইকি / মনিটর_দ্বয় সংশ্লেষন) অনুসারে , সাধারণত মনিটরের শর্তের পরিবর্তনশীলগুলিতে অপেক্ষা / সংকেত কল থাকে যা প্রয়োগে প্রয়োগ করা উচিত। তবে অ্যাপ্লিকেশনটিতে মুটেক্স হ্যান্ডেল করার দরকার নেই তাই সম্ভবত এটি ব্যবহার করা সহজ।
সামুটাম

5

আপনি আজ বক্তৃতায় কেন একটি সেমফোর পরিবর্তে একটি মনিটর ব্যবহার করবেন তা আমরা শেষ পর্যন্ত আলোচনা করেছি।

এটি মূলত এটিতে নেমে আসে: মনিটর এবং সেমফোরটি সমানভাবে ভাববাদী, যার অর্থ আপনি একটি মনিটরের কোনও সমস্যার সমাধান পেতে পারেন যেখানে মূলত একটি সেমফোর ব্যবহৃত হয়েছিল এবং বিপরীতে।

ঠিক আছে, আমরা এটি ইতিমধ্যে জানতাম, সুতরাং আপনি কেন একটি সেমফোর পরিবর্তে একটি মনিটর ব্যবহার করবেন?

নিজের পছন্দ. সাধারণত একটি ডেস্কটপ অ্যাপ্লিকেশন মনিটর ব্যবহার করে, ভুলগুলির জন্য কম সম্ভাবনা ফেলে রাখে, তবে বাণিজ্য হিসাবে বন্ধুত্বপূর্ণভাবে ফুলে যায় having অপরদিকে সেমফোরগুলি প্রায়শই অপারেটিং সিস্টেমগুলিতে ব্যবহৃত হয়, কারণ এটি হালকা ওজনের কাঠামো, তবে ভুলের জন্য আরও সম্ভাবনা ফেলে।

আমি অনুমান করি যে আমরা উপসংহারে পৌঁছাতে পারি যে এটি একটি পরিস্থিতিগত সিদ্ধান্ত, তবে আপনার কোনও মনিটর বা সেমোফোর ব্যবহার করতে / চাই না। আপনি যদি রিয়েল টাইম সিস্টেমটি তৈরি করেন তবে আপনি একটি সেমফোর নিয়ে যেতে চাইতে পারেন, আপনি যদি কোনও অফিস প্রোগ্রাম তৈরি করে থাকেন তবে আপনি মনিটরের সাথে যেতে পারেন।


1

উদাহরণস্বরূপ দেখুন "Sempaphores এর ছোট বই"লিখেছেন অ্যালেন বি। এটি সিঙ্ক্রোনাইজেশনের প্রচুর সমস্যা বর্ণনা করে এবং সমাধান করে। বিশেষত বোটড সলিউশনগুলি পরীক্ষা করে দেখুন এবং আপনি দেখতে পাবেন যে সেমোফোরগুলি একটি খুব নিম্ন-স্তরের মেকাবাদ, খুব শক্তিশালী তবে অপব্যবহারের পক্ষে অত্যন্ত সহজ, যেখানে সাধারণ ভুলগুলির ভয়াবহ অভ্যাস থাকে (সহজাত প্রোগ্রামগুলির অন্তর্নিহিত অদ্বিতীয়তাবাদী ক্রিয়াকলাপটি আরও খারাপ করে তোলে)। এটি উদাহরণস্বরূপ পারস্পরিক বর্জনকে বলবতী করা ভুল, ভুল semaphore চালনা করা ইত্যাদি forget মনিটররা বেশিরভাগ ক্ষেত্রে ব্যবহৃত ক্ষেত্রে প্রিপেইকেড সমাধানগুলি সরবরাহ করে এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের বেশিরভাগ সুবিধা তাদের সাথে বহন করে (যেমন, আপনি জানেন যে মনিটরের দ্বারা পরিচালিত ভেরিয়েবলগুলির সাথে গোলযোগের একমাত্র উপায় এটির কাজগুলির মাধ্যমে হয়)। অসুবিধাটি হ'ল এগুলি সহজে অ-অবজেক্ট-ওরিয়েন্টেড ভাষায় পুনঃনির্মাণ করা যায় না,

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