কেউ পার্থক্য ব্যাখ্যা করতে পারেন:
- লক (সামোবজেক্ট)}
- মিটেক্স ব্যবহার করা হচ্ছে
- সেমাফোর ব্যবহার করা
- মনিটর ব্যবহার করা
- অন্যান্য। নেট সিঙ্ক্রোনাইজেশন ক্লাস ব্যবহার করে
আমি ঠিক এটি বুঝতে পারি না। আমার কাছে মনে হচ্ছে প্রথম দুটো কি এক?
কেউ পার্থক্য ব্যাখ্যা করতে পারেন:
আমি ঠিক এটি বুঝতে পারি না। আমার কাছে মনে হচ্ছে প্রথম দুটো কি এক?
উত্তর:
দুর্দান্ত প্রশ্ন। আমি হয়ত ভুল .. আমাকে চেষ্টা করতে দাও .. আমার উত্স উত্তরের 2 # সংশোধন .. আরও কিছুটা বোঝার সাথে। আমাকে পড়ার জন্য ধন্যবাদ :)
লক (obj)
মনিটর
লক বা মনিটর ব্যবহার করা কোডের থ্রেড সংবেদনশীল ব্লকের একযোগে কার্যকর প্রতিরোধের জন্য দরকারী, তবে এই গঠনগুলি একটি থ্রেডকে অন্য একটি ইভেন্টের সাথে যোগাযোগ করার অনুমতি দেয় না। এর জন্য সিঙ্ক্রোনাইজেশন ইভেন্টগুলির প্রয়োজন , যা দুটি স্টেটের মধ্যে একটির এমন বস্তু যা সংকেতযুক্ত এবং অ-সিগন্যালযুক্ত, যা থ্রেডগুলি সক্রিয় ও স্থগিত করতে ব্যবহৃত হতে পারে। মিটেক্স, সেমফোরস হ'ল ওএস-স্তরীয় ধারণা। উদাহরণস্বরূপ একটি নামযুক্ত মুটেক্সের সাহায্যে আপনি একাধিক (পরিচালিত) এক্সেস জুড়ে সিঙ্ক্রোনাইজ করতে পারবেন (আপনার অ্যাপ্লিকেশনটির কেবলমাত্র একটি উদাহরণ মেশিনে চলছে কিনা তা নিশ্চিত করে))
mutex:
Semaphores (আমার মস্তিষ্কে আঘাত)
Monitor
যোগাযোগটি ভুল হতে দেয় না; আপনি এখনও Pulse
একটি দিয়ে দিয়ে পারেনMonitor
পুনরায় "অন্যান্য। নেট সিঙ্ক্রোনাইজেশন ক্লাসগুলি ব্যবহার করা হচ্ছে" - অন্যদের মধ্যে আপনার কিছু সম্পর্কে জানা উচিত:
সিসিআর / টিপিএল ( সমান্তরাল এক্সটেনশানস সিটিপি) - এ আরও (লো ওভারহেড) লকিং কনস্ট্রাকশন রয়েছে - তবে আইআইআরসি, এগুলি নেট নেট 4.0.০ এ উপলব্ধ করা হবে
ইসিএমএ-তে বর্ণিত হিসাবে এবং আপনি যেমন প্রতিফলিত পদ্ধতিগুলি থেকে পর্যবেক্ষণ করতে পারেন লক স্টেটমেন্টটি মূলত সমান
object obj = x;
System.Threading.Monitor.Enter(obj);
try {
…
}
finally {
System.Threading.Monitor.Exit(obj);
}
পূর্বোক্ত উদাহরণ থেকে আমরা দেখতে পাচ্ছি যে মনিটররা বস্তুগুলিতে লক করতে পারে।
মেটেক্সগুলি কার্যকর হয় যখন আপনার ইন্টারপ্রসেস সিঙ্ক্রোনাইজেশন প্রয়োজন কারণ তারা কোনও স্ট্রিং আইডেন্টিফায়ারকে লক করতে পারে । একই স্ট্রিং আইডেন্টিফায়ারটি লকটি অর্জন করতে বিভিন্ন প্রক্রিয়া দ্বারা ব্যবহার করা যেতে পারে।
সেমোফোরগুলি স্টেরয়েডগুলিতে মুটেক্সেসের মতো, তারা একযোগে অ্যাক্সেসের সর্বাধিক গণনা সরবরাহ করে একযোগে অ্যাক্সেসের অনুমতি দেয়। একবার সীমা পৌঁছে গেলে সেমফোরে রিসোর্সে আর কোনও অ্যাক্সেস আটকাতে শুরু করে যতক্ষণ না কলার একজন সেমফোর প্রকাশ না করে।
আমি ডটজিএনইউতে থ্রেডিংয়ের জন্য ক্লাস ও সিএলআর সমর্থন করেছি এবং আমার কিছু চিন্তা আছে ...
যদি আপনার ক্রস প্রক্রিয়া লকগুলির প্রয়োজন না থাকে তবে আপনার সর্বদা Mutex এবং Semaphores ব্যবহার এড়ানো উচিত। .NET- এ এই ক্লাসগুলি উইন 32 মুটেক্স এবং সেমোফোরসের চারপাশে মোড়ক এবং বরং ভারী ওজনযুক্ত (তাদের কার্নেলের মধ্যে একটি প্রসঙ্গের স্যুইচ প্রয়োজন যা ব্যয়বহুল - বিশেষত যদি আপনার লকটি বিতর্ক না করে)।
অন্যদের যেমন উল্লেখ করা হয়েছে, সি # লক স্টেটমেন্টটি মনিটর.এন্টার এবং মনিটরের জন্য সংকলক যাদু x এক্সিট (একটি চেষ্টা / শেষ অবধি বিদ্যমান)।
মনিটরের একটি সাধারণ তবে শক্তিশালী সিগন্যাল / অপেক্ষার প্রক্রিয়া রয়েছে যা মন্টেক্সের কাছে মনিটর.পুলস / মনিটর.বিট পদ্ধতিগুলির মাধ্যমে নেই। উইন 32 সমতুল্য হ'ল ক্রিয়েটিভেন্টের মাধ্যমে ইভেন্ট ইভেন্ট হবে যা প্রকৃতপক্ষে ওয়েটহ্যান্ডলস হিসাবে নেটও উপস্থিত রয়েছে। পালস / ওয়েট মডেলটি ইউনিক্সের pthread_signal এবং pthread_wait এর অনুরূপ তবে দ্রুততর কারণ এগুলি অন-বিবাদযুক্ত ক্ষেত্রে সম্পূর্ণরূপে ব্যবহারকারী-মোড অপারেশন হতে পারে।
মনিটর.পুলস / অপেক্ষা করুন ব্যবহার করা সহজ। একটি থ্রেডে, আমরা কোনও বস্তুকে লক করব, একটি পতাকা / রাষ্ট্র / সম্পত্তি যাচাই করুন এবং এটি আমাদের প্রত্যাশা মতো না হলে মনিটরে কল করুন aউইট যা লকটি প্রকাশ করবে এবং একটি নাড়ি পাঠানো পর্যন্ত অপেক্ষা করবে। যখন প্রত্যাবর্তন ফিরে আসে, আমরা ফিরে লুপ করে আবার পতাকা / রাজ্য / সম্পত্তি যাচাই করি। অন্য থ্রেডে, আমরা যখনই পতাকা / রাজ্য / সম্পত্তি পরিবর্তন করি তখন আমরা বস্তুটিকে লক করি এবং তারপরে যেকোন শ্রেনী থ্রেড জাগ্রত করতে পल्सএলকে কল করি।
প্রায়শই আমরা চাই আমাদের ক্লাসগুলি থ্রেড নিরাপদ থাকুক যাতে আমরা আমাদের কোডে লক রাখি। তবে এটি প্রায়শই ঘটে থাকে যে আমাদের ক্লাসটি কেবলমাত্র একটি থ্রেড দ্বারা ব্যবহৃত হবে। এর অর্থ লকগুলি অকারণে আমাদের কোডটি ধীরে ধীরে কমিয়ে দেয় ... এখানেই সিএলআরের চৌকস আশাবাদ পারফরম্যান্স উন্নত করতে সহায়তা করতে পারে improve
আমি মাইক্রোসফ্টের লক প্রয়োগের বিষয়ে নিশ্চিত নই তবে ডটজিএনইউ এবং মনোতে প্রতিটি বস্তুর শিরোনামে একটি লক স্টেট পতাকা সংরক্ষণ করা হয়। .NET (এবং জাভা) এর প্রতিটি বস্তু একটি লক হয়ে উঠতে পারে তাই প্রতিটি বস্তুকে তাদের শিরোনামে এটি সমর্থন করা দরকার। ডটজিএনইউ বাস্তবায়নে, এমন একটি পতাকা রয়েছে যা আপনাকে লক হিসাবে ব্যবহৃত প্রতিটি বস্তুর জন্য একটি গ্লোবাল হ্যাশটেবল ব্যবহার করতে দেয় - এটি প্রতিটি বস্তুর জন্য 4 বাইট ওভারহেড অপসারণের সুবিধা অর্জন করে। এটি মেমোরির জন্য দুর্দান্ত নয় (বিশেষত এমবেড হওয়া সিস্টেমগুলির জন্য যা ভারী থ্রেড হয় না) তবে তার কার্যকারিতা হিট হয়েছে।
মনো এবং ডটজিএনইউ উভয় কার্যকরভাবে লকিং / অপেক্ষার কাজ করতে মুটেক্সেস ব্যবহার করে তবে সত্যই প্রয়োজন না হওয়া পর্যন্ত একটি হার্ড লক সম্পাদন করার প্রয়োজনটিকে নির্মূল করার জন্য একটি স্পিনলক স্টাইল তুলনা-এবং এক্সচেঞ্জ অপারেশন ব্যবহার করুন :
আপনি কীভাবে এখানে মনিটরগুলি প্রয়োগ করা যেতে পারে তার একটি উদাহরণ দেখতে পাবেন:
http://cvs.savannah.gnu.org/viewvc/dotgnu-pnet/pnet/engine/lib_monitor.c?revision=1.7&view=markup
আপনি স্ট্রিং আইডি দিয়ে চিহ্নিত যে কোনও ভাগ করা মিটেক্সকে লক করার জন্য অতিরিক্ত সতর্কতা হ'ল এটি একটি "লোকাল \" মিটেক্সে ডিফল্ট হবে এবং একটি টার্মিনাল সার্ভার পরিবেশে সেশনগুলিতে ভাগ করা হবে না।
ভাগ করা সিস্টেম সংস্থাগুলিতে অ্যাক্সেস সঠিকভাবে নিয়ন্ত্রণ করা হয়েছে তা নিশ্চিত করতে আপনার "স্ট্রিং আইডেন্টিফায়ারকে" গ্লোবাল \ "দিয়ে উপসর্গ করুন। আমি এটি উপলব্ধি করার আগেই সিস্টেম সিস্টেমে একাউন্টের অধীনে চলমান পরিষেবাটির সাথে যোগাযোগগুলি সিঙ্ক্রোনাইজ করার সমস্যাগুলির পুরো স্তূপে ছুটছিলাম।
যদি আপনি পারেন তবে আমি "লক ()", "মুটেক্স" এবং "মনিটর" এড়াতে চেষ্টা করব ...
নতুন নেটস্পেস সিস্টেমটি দেখুন Col
সংগ্রহগুলি। নেট 4 এ সামঞ্জস্য করুন এটিতে কিছু দুর্দান্ত থ্রেড-নিরাপদ সংগ্রহের ক্লাস রয়েছে
http://msdn.microsoft.com/en-us/library/system.collections.concurrent.aspx
সমসাময়িক অভিধানে শিলা! আমার জন্য আর কোনও ম্যানুয়াল লকিং নেই!
বেশিরভাগ ক্ষেত্রে আপনার লক (= মনিটরের) বা মিটেক্সেস / সেমফোরাস ব্যবহার করা উচিত নয় । এগুলি সকলেই বর্তমান থ্রেড ব্লক করে।
এবং আপনার অবশ্যই ক্লাস ব্যবহার করা উচিত নয় System.Collections.Concurrent
- এগুলি জাতিদের শর্তের মূল উত্স কারণ একাধিক সংগ্রহের মধ্যে লেনদেনকে সমর্থন করে না এবং বর্তমান থ্রেডকে অবরুদ্ধ করে।
আশ্চর্যজনকভাবে .NET এর সিঙ্ক্রোনাইজেশনের কার্যকর ব্যবস্থা নেই।
আমি সি # তে জিসিডি ( ওয়ার্ল্ড) থেকে ক্রমিক ক্রোম প্রয়োগ করেছি Objc/Swift
- খুব হালকা ওজনের, পরীক্ষার সাহায্যে থ্রেড পুল ব্যবহার করে এমন সিঙ্ক্রোনাইজেশন সরঞ্জামকে ব্লক করে না।
ডাটাবেস অ্যাক্সেস (হ্যালো স্ক্লাইট) থেকে ব্যবসায়িক যুক্তিতে কোনও কিছুর সিঙ্ক্রোনাইজ করার এটি সেরা উপায়।