মিউটেক্স কী?


651

একটি মিউটেক্স একটি প্রোগ্রামিং ধারণা যা ঘন ঘন মাল্টি-থ্রেডিং সমস্যাগুলি সমাধান করার জন্য ব্যবহৃত হয়। সম্প্রদায়ের কাছে আমার প্রশ্ন:

মিউটেক্স কী এবং আপনি কীভাবে এটি ব্যবহার করবেন?


2
পার্থক্য সম্পর্কে এখানে একটি ভাল নিবন্ধটি রয়েছে: ব্যারগ্রুপ.com
অ্যাডাম ডেভিস

মুটেক্সের একটি টিউটোরিয়াল জিনিসগুলি পরিষ্কার করতে সহায়তা করতে পারে: stackoverflow.com/questions/4989451/mutex-example-
নভে

1
একটি মিউটেক্সটি কোনও গ্যাস স্টেশনের বাথরুমের চাবিয়ের মতো, এটি নিশ্চিত করা হয় যে একবারে কেবল একজন ব্যক্তি বাথরুমটি ব্যবহার করতে পারে এবং বর্তমান চালক শেষ না হওয়া এবং চাবিটি ফিরে না আসা পর্যন্ত অন্য কেউ টয়লেট ব্যবহার করতে পারে না।
jonschlinkert

উত্তর:


2147

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

চিকেনকে মুটেক্স এবং থ্রেডযুক্ত ব্যক্তির সাথে প্রতিস্থাপন করুন এবং আপনার কাছে মূলত একটি মিউটেক্সের ধারণা রয়েছে।

অবশ্যই, রাবার মিটেক্সের মতো কোনও জিনিস নেই। কেবল রাবারের মুরগি। আমার বিড়ালদের একবার রাবারের মাউস ছিল, তবে তারা এটি খেয়েছে।

অবশ্যই, আপনি রাবারের মুরগি ব্যবহার করার আগে, আপনাকে নিজের কাছে জিজ্ঞাসা করা উচিত যে আপনার আসলে এক ঘরে 5 জন লোকের দরকার আছে এবং রুমে থাকা একজন ব্যক্তির নিজের কাজ সমস্ত কাজ করা কি কেবল সহজ নয়? আসলে, এটি সাদৃশ্যটি প্রসারিত করছে, তবে আপনি ধারণাটি পাবেন।


9
দুর্দান্ত উত্তর। এটি কি যুক্তিযুক্ত হতে পারে যে মুটেক্স আসলে এমন নিয়ম যা মুরগি পাস হওয়া বন্ধ করে দেয়? এবং মুরগি জিনিস আপনি লক করছি?
স্যার ইয়াকালট

3
@ স্যার ইয়াকালোট, আপনার অর্থ মুরগি হল সম্পদ, এবং মডারেটরটি কী মিউটেক্স?
ওয়েন

155
মুরগি হ'ল মিটেক্স । লোকেরা মু .. মুরগি হোল্ডিং করে থ্রেডের প্রতিযোগিতা করছে । মডারেটর হ'ল ওএস । লোকেরা মুরগির জন্য অনুরোধ করলে তারা লক অনুরোধ করে। আপনি যখন মুটেক্স.লক () কল করেন তখন আপনার থ্রেডটি লক () এ স্টল করে এবং ওএসে লক অনুরোধ করে। যখন ওএস শনাক্ত করে যে একটি মুদ্রাটি একটি থ্রেড থেকে প্রকাশিত হয়েছিল, তখন এটি কেবল আপনাকে দেয় এবং লক () ফেরত দেয় - মিউটেক্সটি এখন আপনার এবং কেবল আপনার। অন্য কেউ এটিকে চুরি করতে পারে না, কারণ কলিং লক () তাকে অবরুদ্ধ করবে। এছাড়াও ট্রাই_লক () রয়েছে যা মুটেক্স আপনার হলে অবরুদ্ধ এবং সত্য ফিরে আসবে এবং যদি মিটেক্স ব্যবহার করা হয় তবে অবিলম্বে মিথ্যা।
Петър Петров

4
তুমি খুব মেধাবী. আপনি মনিটরদের ব্যাখ্যা করতে রাবারের মুরগির রূপক ব্যবহার করতে পারেন?
রিকার্ডো

98
কখনও কখনও কিছু প্রোগ্রামিং ধারণার উত্স অস্পষ্ট। একজন নবাগত লোক ভাবতে ভাবতে পারে যে কেন সবাই রেজেক্সের কথা বলছে। এটি স্পষ্ট নয় যে [রেজি] উলার [প্রাক্তন] চাপের জন্য রেজেেক্স সংক্ষিপ্ত। একইভাবে, [মিউট] ইউল [প্রাক্তন] ক্লিউশনের জন্য মিউটেক্স সংক্ষিপ্ত। এটি শব্দের অর্থ হজম সহজ করে তুলতে পারে। @ দ্য স্মার্ফ তাদের উত্তরে এটির সাথে যুক্ত হয়েছে, তবে এটি এখানে historicalতিহাসিক উদ্দেশ্যে যুক্ত করা ভাল be
ডডজি জাজকুমা

137

একটি Mutex একটি পারস্পরিক একচেটিয়া পতাকা। এটি কোডের একটি বিভাগে গেট রক্ষক হিসাবে কাজ করে যা একটি থ্রেডকে অনুমতি দেয় এবং অন্য সকলের অ্যাক্সেস অবরুদ্ধ করে। এটি নিশ্চিত করে যে কোডটি নিয়ন্ত্রিত হচ্ছে কেবল একবারে একক থ্রেড দ্বারা আঘাত করা হবে। আপনার কাজ শেষ হয়ে গেলে কেবল মুটেক্সকে ছেড়ে দিতে ভুলবেন না। :)


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

72

পারস্পরিক বর্জন। এটিতে উইকিপিডিয়া এন্ট্রি এখানে:

http://en.wikipedia.org/wiki/Mutual_exclusion

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

কীভাবে এটি সম্পাদিত হয় তার নির্দিষ্ট বিবরণ অবশ্যই স্পষ্টতই প্রোগ্রামিং ভাষার মাধ্যমে পরিবর্তিত হয়।


64

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

ধারণাটিকে "মিউচুয়াল এক্সক্লুশন" (সংক্ষিপ্ত মিটেক্স) বলা হয় এবং এটি সেই উপায়ের মাধ্যমে সেই অঞ্চলে কেবলমাত্র একটি থ্রেড অনুমোদিত হয় তা নিশ্চিত করার একটি উপায় that

এগুলি কীভাবে ব্যবহার করবেন তা ভাষা নির্দিষ্ট, তবে প্রায়শই (সর্বদা না হলে) অপারেটিং সিস্টেম মিটেক্সের উপর ভিত্তি করে।

উদাহরণস্বরূপ ফাংশনাল প্রোগ্রামিং (হাস্কেল, এমএল ভাল উদাহরণ) উদাহরণস্বরূপ কিছু ভাষার জন্য এই নির্মাণের প্রয়োজন নেই।


26

সি # তে, ব্যবহৃত সাধারণ মিটেক্স হ'ল মনিটর । প্রকারটি হ'ল ' সিস্টেম.ট্রেডিং.মনিটর '। এটি ' লক (অবজেক্ট) ' স্টেটমেন্টের মাধ্যমেও স্পষ্টভাবে ব্যবহার করা যেতে পারে । এর ব্যবহারের একটি উদাহরণ সিঙ্গলটন ক্লাস নির্মাণের সময়।

private static readonly Object instanceLock = new Object();
private static MySingleton instance;
public static MySingleton Instance
{
    lock(instanceLock)
    {
        if(instance == null)
        {
            instance = new MySingleton();
        }
        return instance;
    }
}

ব্যক্তিগত লক অবজেক্ট ব্যবহার করে লক স্টেটমেন্টটি একটি গুরুত্বপূর্ণ বিভাগ তৈরি করে। পূর্ববর্তীটি শেষ না হওয়া পর্যন্ত প্রতিটি থ্রেড অপেক্ষা করা দরকার। প্রথম থ্রেডটি বিভাগে প্রবেশ করবে এবং উদাহরণটি সূচনা করবে। দ্বিতীয় থ্রেডটি অপেক্ষা করবে, বিভাগে প্রবেশ করবে এবং প্রাথমিক সূচনাটি পাবে।

স্থির সদস্যের যে কোনও ধরণের সিঙ্ক্রোনাইজেশন লক স্টেটমেন্টটি একইভাবে ব্যবহার করতে পারে।


1
এটি একটি বাস্তবায়ন নির্ভর উত্তর। এছাড়াও, সিএসে একটি মনিটর মিটেক্সের চেয়ে আলাদা। মনিটরের একটি সিঙ্ক্রোনাইজেশন মেকানিজম রয়েছে তবে মিটেক্সের আর প্রয়োজন না হওয়া পর্যন্ত জিনিসটি লক করে দেওয়া হয়। বাস্তবায়নের বিশদ বা সি # শব্দার্থবিজ্ঞানের বিষয়ে
আইডিকে

23

একটি মিটেক্স কী ?

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

একটি কি রেস অবস্থা ?

দুটি বা ততোধিক থ্রেড ভাগ করা ডেটা অ্যাক্সেস করতে পারে এমন সময় একটি দৌড়ের অবস্থা ঘটে এবং তারা একই সাথে এটি পরিবর্তন করার চেষ্টা করে। যেহেতু থ্রেড শিডিয়ুলিং অ্যালগরিদম যে কোনও সময় থ্রেডগুলির মধ্যে অদলবদল করতে পারে, তাই থ্রেডগুলি ভাগ করে নেওয়া ডেটা অ্যাক্সেস করার চেষ্টা করবে threads সুতরাং, ডেটা পরিবর্তনের ফলাফল থ্রেড শিডিয়ুলিং অ্যালগরিদমের উপর নির্ভরশীল, অর্থাত উভয় থ্রেড ডেটা অ্যাক্সেস / পরিবর্তন করতে "রেসিং" করছে।

বাস্তব জীবনের উদাহরণ:

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

চিকেনকে মুটেক্স এবং থ্রেডযুক্ত ব্যক্তির সাথে প্রতিস্থাপন করুন এবং আপনার কাছে মূলত একটি মিউটেক্সের ধারণা রয়েছে।

@Xetius

সি # তে ব্যবহার:

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

using System;
using System.Threading;

class Example
{
    // Create a new Mutex. The creating thread does not own the mutex.
    private static Mutex mut = new Mutex();
    private const int numIterations = 1;
    private const int numThreads = 3;

    static void Main()
    {
        // Create the threads that will use the protected resource.
        for(int i = 0; i < numThreads; i++)
        {
            Thread newThread = new Thread(new ThreadStart(ThreadProc));
            newThread.Name = String.Format("Thread{0}", i + 1);
            newThread.Start();
        }

        // The main thread exits, but the application continues to
        // run until all foreground threads have exited.
    }

    private static void ThreadProc()
    {
        for(int i = 0; i < numIterations; i++)
        {
            UseResource();
        }
    }

    // This method represents a resource that must be synchronized
    // so that only one thread at a time can enter.
    private static void UseResource()
    {
        // Wait until it is safe to enter.
        Console.WriteLine("{0} is requesting the mutex", 
                          Thread.CurrentThread.Name);
        mut.WaitOne();

        Console.WriteLine("{0} has entered the protected area", 
                          Thread.CurrentThread.Name);

        // Place code to access non-reentrant resources here.

        // Simulate some work.
        Thread.Sleep(500);

        Console.WriteLine("{0} is leaving the protected area", 
            Thread.CurrentThread.Name);

        // Release the Mutex.
        mut.ReleaseMutex();
        Console.WriteLine("{0} has released the mutex", 
            Thread.CurrentThread.Name);
    }
}
// The example displays output like the following:
//       Thread1 is requesting the mutex
//       Thread2 is requesting the mutex
//       Thread1 has entered the protected area
//       Thread3 is requesting the mutex
//       Thread1 is leaving the protected area
//       Thread1 has released the mutex
//       Thread3 has entered the protected area
//       Thread3 is leaving the protected area
//       Thread3 has released the mutex
//       Thread2 has entered the protected area
//       Thread2 is leaving the protected area
//       Thread2 has released the mutex

এমএসডিএন রেফারেন্স মুটেক্স


1
খুব ভাল উদাহরণ
সিউই শেন 申思维

21

এখানে কিছু দুর্দান্ত উত্তর রয়েছে, মিটেক্স কী তা বোঝানোর জন্য এখানে আরও একটি দুর্দান্ত উপমা রয়েছে:

একটি কী দিয়ে একক টয়লেট বিবেচনা করুন । কেউ প্রবেশ করলে তারা চাবিটি নিয়ে যায় এবং টয়লেটটি দখল করে নেওয়া হয় । অন্য কারও যদি টয়লেট ব্যবহারের প্রয়োজন হয় তবে তাদের একটি সারিতে অপেক্ষা করতে হবে । টয়লেটে ব্যক্তিটি করা হয়ে গেলে তারা পরবর্তী ব্যক্তির চাবিটি সারিতে রেখে দেয়। ঠিক বুঝেছ?

গল্পের টয়লেটটিকে একটি ভাগ করা সংস্থান এবং একটি মিটেক্সের চাবিতে রূপান্তর করুন । টয়লেটের চাবিটি (একটি লক অর্জন) আপনাকে এটি ব্যবহারের অনুমতি দেয়। যদি কোনও কী না থাকে (লকটি তালাবদ্ধ থাকে) আপনাকে অপেক্ষা করতে হবে। যখন ব্যক্তিটি দ্বারা চাবিটি ফিরে আসে ( লকটি ছেড়ে দিন ) আপনি এখন তা অর্জনে মুক্ত।


তবে সি # উদাহরণটি আপনার কাতার দৃ as় সমর্থনকে সমর্থন করে না, "কিউ-এর পরবর্তী ব্যক্তির কাছে কীটি দিন"। উদাহরণটি স্ট্যাক বা এলোমেলোভাবে প্রদর্শিত হচ্ছে। 1, 2, এবং 3 সমস্ত ক্রমের অনুরোধ অ্যাক্সেস। একজনকে প্রথমে সুরক্ষিত অঞ্চলে অনুমতি দেওয়া হয় এবং তারপরে তিনটিকে অনুমোদিত। একটি সারি এটি দ্বিতীয় দেওয়া হবে।
donvnielsen

আমি কোনও কংক্রিট বাস্তবায়ন বা কংক্রিট প্রোগ্রামিং ভাষা উল্লেখ করছি না। আমার উদাহরণটি নীতি হিসাবে মিটেক্সের উচ্চ স্তরের বিমূর্তির সাথে সম্পর্কিত।
চেন এ।

18

মিটেক্স বুঝতে প্রথমে আপনাকে "রেস কন্ডিশন" কী তা জানতে হবে এবং তারপরে কেবল মিউটেক্সের প্রয়োজন কেন তা আপনি বুঝতে পারবেন। ধরুন আপনার একটি মাল্টি-থ্রেডিং প্রোগ্রাম রয়েছে এবং আপনার দুটি থ্রেড রয়েছে। এখন, আপনার চাকরির সারিতে একটি কাজ আছে। প্রথম থ্রেড জব সারিটি পরীক্ষা করবে এবং কাজটি সন্ধানের পরে এটি কার্যকর করা শুরু করবে। দ্বিতীয় থ্রেডটিও কাজের সারিটি পরীক্ষা করে দেখবে যে সারিতে একটি কাজ রয়েছে। সুতরাং, এটি একই কাজ পয়েন্টার নির্ধারণ করবে। সুতরাং, এখন কি হয়, উভয় থ্রেড একই কাজ সম্পাদন করছে। এটি বিভাজন ত্রুটির কারণ হবে। এটি একটি রেসের শর্তের উদাহরণ।

এই সমস্যার সমাধান হ'ল মিটেক্স। মিউটেক্স হ'ল এক ধরণের লক যা একবারে একটি থ্রেড লক করে। অন্য থ্রেড যদি এটি লক করতে চায় তবে থ্রেডটি কেবল অবরুদ্ধ হয়ে যায়।

এই পিডিএফ ফাইল লিঙ্কে MUTEX বিষয় সত্যিই পড়ার জন্য মূল্যবান।


"মিটেক্স টপিক" দ্বারা আপনি সেমোফোরেস বিভাগটি বোঝাতে চেয়েছিলেন, কারণ এর উদাহরণগুলি বাইনারি সেম্যাফোোরস, তাই না?
কার্ল জি

2
ভাল একটি Mutex মান 1 সঙ্গে একটি semaphore
marcoslhc

আপনি যে অধ্যায়টি ভাগ করেছেন তার বইয়ের নাম কী? দয়া করে
ওমর ফারুক অনিক

@ ওমরফারাকোঅনিক গ্রন্থটি রেফারেন্সড লিনাক্স প্রোগ্রামিং দ্বারা কোডসোসারি এলএলসি, নিউ রাইডার্স পাবলিশিং দ্বারা প্রকাশিত এবং লিঙ্কযুক্ত ডোমেনের হোম পৃষ্ঠা থেকে অ্যাক্সেস করা যেতে পারে।
RMart

11

মৌলিকাগুলি এমন পরিস্থিতিতে কার্যকর যেখানে আপনার একাধিক প্রক্রিয়া জুড়ে কোনও সংস্থার একচেটিয়া অ্যাক্সেস প্রয়োগ করতে হবে, যেখানে নিয়মিত লক সাহায্য করবে না কারণ এটি কেবলমাত্র থ্রেড জুড়ে কাজ করে।


এটা কি সত্যি? স্বতন্ত্র প্রক্রিয়াগুলি কি তাদের নিজস্ব মুটেক্স অনুলিপি তৈরি করে?
লিওন

0

Mutex: mutex ঘোরা Mut ual প্রাক্তন clusion। এর অর্থ একটি সময়ে একটি প্রক্রিয়া / থ্রেড সমালোচনামূলক বিভাগে প্রবেশ করতে পারে। একযোগে প্রোগ্রামিং যেখানে একাধিক থ্রেড / প্রক্রিয়া ভাগ করা সংস্থান (যে কোনও ভেরিয়েবল, ভাগ করা মেমরি ইত্যাদি) আপডেট করার চেষ্টা করে তাতে কিছু অপ্রত্যাশিত ফলাফল হতে পারে। (ফলাফলটি কোন থ্রেড / প্রক্রিয়াটিতে প্রথম অ্যাক্সেস পায় তার উপর নির্ভর করে)।

এ জাতীয় অপ্রত্যাশিত ফলাফল এড়াতে আমাদের কয়েকটি সিঙ্ক্রোনাইজেশন প্রক্রিয়া দরকার যা এটি নিশ্চিত করে যে একটি সময়ে কেবল একটি থ্রেড / প্রক্রিয়া এই জাতীয় সংস্থানটিতে অ্যাক্সেস পেয়েছে।

pthread লাইব্রেরি Mutex জন্য সমর্থন সরবরাহ করে।

typedef union
{
  struct __pthread_mutex_s
  {
    ***int __lock;***
    unsigned int __count;
    int __owner;
#ifdef __x86_64__
    unsigned int __nusers;
#endif
 int __kind;
#ifdef __x86_64__
    short __spins;
    short __elision;
    __pthread_list_t __list;
# define __PTHREAD_MUTEX_HAVE_PREV      1
# define __PTHREAD_SPINS             0, 0
#else
    unsigned int __nusers;
    __extension__ union
    {
      struct
      {
        short __espins;
        short __elision;
# define __spins __elision_data.__espins
# define __elision __elision_data.__elision
# define __PTHREAD_SPINS         { 0, 0 }
      } __elision_data;
      __pthread_slist_t __list;
    };
#endif

এটি mutex ডেটা টাইপ যেমন pthread_mutex_t এর কাঠামো। যখন মিউটেক্স লক হয়ে থাকে, __ লকটি 1 এ সেট করুন it এটি আনলক করা হলে __লোকটি 0 এ সেট করুন।

এটি নিশ্চিত করে যে কোনও দুটি প্রক্রিয়া / থ্রেড একই সময়ে সমালোচনামূলক বিভাগে অ্যাক্সেস করতে পারে না।

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