জাভা এবং এর ব্যবহারের সেমফোর কী?



প্রক্রিয়াগুলির সিঙ্ক্রোনাইজেশনের জন্য একটি সেমফোর ব্যবহৃত হয়। এই ব্লগটি আপনাকে জাভাতে বিভিন্ন ধরণের এবং সেমফোরগুলি প্রয়োগের মধ্য দিয়ে যাবে।

একটি সেমফোর কাউন্টারের মাধ্যমে একটি ভাগ করা সংস্থায় অ্যাক্সেস নিয়ন্ত্রণ করে। এটা থ্রেড সিঙ্ক্রোনাইজেশন মিসড সিগন্যালগুলি এড়াতে বা কোনও সমালোচনামূলক বিভাগ রক্ষার জন্য থ্রেডগুলির মধ্যে সংকেত প্রেরণের জন্য ব্যবহার করুন। জাভাতে সেমফোর্সের এই ব্লগে আমরা ধারণাটি বিস্তারিতভাবে বুঝতে পারি will
নিম্নলিখিত বিষয়গুলি এই ব্লগে কভার করা হবে:

জাভাতে সেমফোর কী?

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





Semaphore প্রকারের -

  • বাইনারি semaphore: একটি বাইনারি সেম্যাফোর কেবলমাত্র 0 এবং 1 এর মান হিসাবে নেয় এবং পারস্পরিক বর্জন বাস্তবায়নের পাশাপাশি সমবর্তী প্রক্রিয়াগুলি সিঙ্ক্রোনাইজ করতে ব্যবহৃত হয়।

    টাইট কাপলিং বনাম লুজ কাপলিং
  • সেমফোর গণনা: যে কোনও বিন্দুতে একটি গণনা সেমফোরের মান সর্বাধিক সংখ্যক প্রক্রিয়াগুলি নির্দেশ করে যা সঠিক সময়ে সমালোচনামূলক বিভাগে প্রবেশ করতে পারে।



সেমফোরের কাজ

  • যদি সেমফোর গণনা> 0 হয় তবে থ্রেডটি পারমিট অর্জন করে, সেমফোরের গণনা হ্রাস করে।

    কীভাবে ডাটাবেস টেস্টিং করবেন
  • অন্যথায়, অনুমতি না নেওয়া পর্যন্ত অবরুদ্ধ করা আছে।

  • থ্রেডের আর কোনও ভাগ করা সংস্থার অ্যাক্সেসের প্রয়োজন নেই, তখন সেমফোর কাউন্ট বাড়িয়ে অনুমতিটি প্রকাশ করে।



  • যদি অন্য থ্রেড কোনও পারমিটের জন্য অপেক্ষা করে থাকে, তবে সেই থ্রেডটি সেই সময়ে কোনও পারমিট অর্জন করবে।

সেমফোর বাস্তবায়ন

আমদানি java.util.concurrent। * // রিসোর্সকে ভাগ করা শ্রেণীর শ্রেণীর হিসাবে গ্রহণ করবে রিসোর্স {স্ট্যাটিক ইন্ট কাউন্ট = 0} ক্লাস মাইডেমো ডেমো {সেমফোর সেম স্ট্রিং থ্রেডনাম পাবলিক মাইডেমো (সেমফোর সেম, স্ট্রিং থ্রেডনাম)) সুপার (থ্রেডনাম) this sem = sem this.threadName = सूत्रনাম} @ ওভাররাইড সার্বজনীন শূন্য রান () {// এক্স বাই চালান যদি (this.getName () সমান ('এক্স'))। System.out.println ('শুরু হচ্ছে' + থ্রেডনাম) চেষ্টা করুন {// শেয়ার্ড রিসোর্স System.out.println (থ্রেডনাম + 'পারমিটের জন্য অপেক্ষা করছে waiting') প্রবেশাধিকারের অনুমতি পাবে // লক sem.acquire () System.out.println অর্জন (থ্রেডনাম + 'একটি অনুমতি পেয়েছে । ') // এখন, ভাগ করা সংস্থান অ্যাক্সেস করা এবং বিশ্রামের জন্য অপেক্ষা করা হবে (int i = 0 i)<7 i++) { Resource.count++ System.out.println(threadName + ': ' + Resouce.count) // Now thread Y will try to execute Thread.sleep(20) } } catch (InterruptedException exc) { System.out.println(exc) } // Release the permit. System.out.println(threadName + ' releases the permit.') sem.release() } // run by thread Y else { System.out.println('Starting ' + threadName) try { // First, Y will try to get permit System.out.println(threadName + ' waiting for a permit.') // acquiring the lock sem.acquire() System.out.println(threadName + ' gets a permit.') // Now, accessing the shared resource and others will wait for(int i=0 i < 7 i++) { Resource.count-- System.out.println(threadName + ': ' + Resource.count) // Now, allowing a context switch -- if possible. // for thread X to execute Thread.sleep(20) } } catch (InterruptedException exc) { System.out.println(exc) } // Release the permit. System.out.println(threadName + ' releases the permit.') sem.release() } } } public class SemTest { public static void main(String args[]) throws InterruptedException { // creating a Semaphore object // with number of permits 1 Semaphore sem = new Semaphore(1) // creating two threads with name X and Y // Here thread X will increment and Y will decrement the counter MyDemo md1 = new MyDemo(sem, 'X') MyDemo md2 = new MyDemo(sem, 'Y') // stating threads X and Y md1.start() md2.start() // waiting for threads X and Y md1.join() mtd.join() System.out.println('count: ' + Resource.count) } } 

আউটপুট-
প্রারম্ভিক এক্স
শুরু Y
এক্স পারমিটের জন্য অপেক্ষা করছে
ওয়াই পারমিটের জন্য অপেক্ষা করছে
এক্স: 1
এক্স: 2
এক্স: 3
এক্স: 4
এক্স: 5
এক্স: 6
এক্স: 7
এক্স পারমিট প্রকাশ করে
ওয়াই পারমিট পায়
Y: 6
ওয়াই: 5
Y: 4
Y: 3
Y: 2
Y: 1
Y: 0
এবং পারমিট প্রকাশ করে
গণনা: 0

বিমূর্ত শ্রেণি এবং ইন্টারফেস পার্থক্য

এটির সাহায্যে, আমরা 'জাভাতে সেমফোরস' - এ এই ব্লগটির শেষে এসেছি। আপনি যদি জাভা সম্পর্কে আরও জানতে চান তবে এটি দেখুন check বিশ্বজুড়ে ছড়িয়ে থাকা 250,000 এরও বেশি সন্তুষ্ট শিক্ষার্থীর নেটওয়ার্ক সহ একটি বিশ্বস্ত অনলাইন লার্নিং সংস্থা এডুরেকা দ্বারা। এডুরেকার জাভা জে 2 ইই এবং এসওএ প্রশিক্ষণ এবং শংসাপত্রের কোর্সটি এমন শিক্ষার্থী এবং পেশাদারদের জন্য তৈরি করা হয়েছে যারা জাভা ডেভেলপার হতে চান। কোর্সটি আপনাকে জাভা প্রোগ্রামিংয়ে একটি প্রধান সূচনা দেওয়ার জন্য এবং হাইবারনেট ও স্প্রিংয়ের মতো বিভিন্ন জাভা ফ্রেমওয়ার্কের পাশাপাশি মূল এবং উন্নত জাভা উভয় ধারণার জন্য প্রশিক্ষণের জন্য তৈরি করা হয়েছে।

আমাদের জন্য একটি প্রশ্ন আছে? দয়া করে এটি 'জাভাতে সেমফোর কী' ব্লগের মন্তব্য বিভাগে উল্লেখ করুন এবং আমরা যত তাড়াতাড়ি সম্ভব আপনার কাছে ফিরে আসব।