মাল্টি থ্রেডিংয়ে লক করার জন্য একটি প্রাইভেট স্ট্যাটিক রিডোনলি অবজেক্ট ব্যবহার করা খুব সাধারণ বিষয়। আমি বুঝতে পারি যে ব্যক্তিগতভাবে এনক্যাপসুলেশন শক্ত করে লকিং অবজেক্টে প্রবেশের পয়েন্টগুলি হ্রাস করা হয় এবং অতএব সর্বাধিক প্রয়োজনীয়টিতে অ্যাক্সেস।
তবে স্থির কেন?
private static readonly object Locker = new object();
শেষে ক্ষেত্রটি কেবলমাত্র আমার ক্লাসের মধ্যে ব্যবহৃত হয়, এবং আমি কেবল এটির পরিবর্তে এটি ব্যবহার করতে পারি:
private readonly object Locker = new object();
কোন মন্তব্য?
হালনাগাদ:
উদাহরণ হিসাবে আমি এই কোডটি পেস্ট করেছি (কেবল একটি উদাহরণ)। আমি এটিতে স্ট্যাটিক বা নন-স্ট্যাটিক লকার ব্যবহার করতে পারি এবং উভয়ই ভাল কাজ করবে। নীচের উত্তরটি বিবেচনা করে আমার কি বরং আমার লকারটিকে এভাবে সংজ্ঞায়িত করা উচিত? (দুঃখিত আমি পরের সপ্তাহে একটি সাক্ষাত্কার আছে এবং প্রতিটি বিস্তারিত জানা প্রয়োজন :)
private readonly object Locker = new object();
এবং এখানে কোড:
private int _priceA;
private int _priceB;
private EventWaitHandle[] _waithandle;
private readonly IService _service;
//ctor
public ModuleAViewModel(IService service)
{
_service = service;
_modelA = new ModelA();
_waithandle = new ManualResetEvent[2];
_waithandle[0] = new ManualResetEvent(false);
_waithandle[1] = new ManualResetEvent(false);
LoadDataByThread();
}
private void LoadDataByThread()
{
new Thread(() =>
{
new Thread(() =>
{
lock (Locker)
{
_priceA = _service.GetPriceA();
}
_waithandle[0].Set();
}).Start();
new Thread(() =>
{
lock (Locker)
{
_priceB = _service.GetPriceB();
}
_waithandle[1].Set();
}).Start();
WaitHandle.WaitAll(_waithandle);
PriceA = _priceA;
PriceB = _priceB;
}).Start();
}
ধন্যবাদ
_service
এবং _waithandle
অবস্থিত? দৃষ্টান্ত? স্ট্যাটিক? অন্যান্য? যে পারে , উদাহরণস্বরূপ, ... একটি দূরবর্তী সার্ভারে ইচ্ছাকৃতভাবে সিঙ্ক্রোনাইজ এক্সেস হতে