সি #: যদি একাধিক থ্রেড থেকে স্থির পদ্ধতিটি কল করা হয়?


95

আমার অ্যাপ্লিকেশনটিতে আমার কাছে একটি স্থিতিশীল পদ্ধতি রয়েছে যা একই সাথে একাধিক থ্রেড থেকে ডাকে। আমার ডেটা মিশ্রিত হওয়ার কি কোনও বিপদ আছে?

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


উত্তর:


99

ভেরিয়েবলগুলি অভ্যন্তরীণ পদ্ধতিগুলি হিসাবে ঘোষণা করা হয় (" ক্যাপচারিত " ভেরিয়েবলগুলির সম্ভাব্য ব্যতিক্রম সহ ) আলাদা করা হয়, সুতরাং আপনি কোনও সহজাত সমস্যা পাবেন না; তবে, যদি আপনার স্থিতিশীল পদ্ধতিটি কোনও ভাগ করা স্থানে প্রবেশ করে, সমস্ত বেট বন্ধ রয়েছে।

ভাগ করা-রাষ্ট্রের উদাহরণগুলি হ'ল:

  • স্থির ক্ষেত্র
  • একটি সাধারণ ক্যাশে থেকে অ্যাক্সেস করা অবজেক্টস (অ-সিরিয়ালাইজড)
  • ইনপুট প্যারামিটারগুলির মাধ্যমে প্রাপ্ত ডেটা (এবং সেগুলির উপরে অবস্থিত), যদি এটি সম্ভব হয় যে একাধিক থ্রেড একই বস্তুর (গুলি) স্পর্শ করছে

আপনি যদি রাষ্ট্র ভাগ করে নিয়ে থাকেন তবে আপনাকে অবশ্যই:

  • রাজ্যটি একবার ভাগ করে নেওয়া সম্ভব না হয়ে সেদিকে লক্ষ্য রাখুন (আরও ভাল: রাষ্ট্রের প্রতিনিধিত্ব করতে অপরিবর্তনীয় বস্তু ব্যবহার করুন এবং রাষ্ট্রের একটি স্ন্যাপশটকে স্থানীয় ভেরিয়েবলে নিয়ে যান - অর্থাত্ whatever.SomeDataবারবার উল্লেখের পরিবর্তে আপনি whatever.SomeData একবার স্থানীয় ভেরিয়েবলে পড়েন এবং তারপরে কেবল পরিবর্তনশীলটি ব্যবহার করুন - নোট করুন যে এটি কেবলমাত্র পরিবর্তনযোগ্য অবস্থার জন্য সহায়তা করে!)
  • ডেটাতে অ্যাক্সেস সিঙ্ক্রোনাইজ করুন (সমস্ত থ্রেড সিঙ্ক্রোনাইজ করতে হবে) - হয় পারস্পরিক একচেটিয়া বা (আরও দানাদার) পাঠক / লেখক

4
@ ডিগো - এই মন্তব্যটি কি আমার জন্য, নাকি @ হোলির পক্ষে?
মার্ক গ্রাভেল

হলিতে, কেবলমাত্র আপনার জবাবটিতে কিছু ব্যবহারিক তথ্য যুক্ত করতে।
দিয়েগো পেরের

4
@ মার্ক আমি "অভ্যন্তরীণ পদ্ধতির ঘোষিত ভেরিয়েবলগুলি (" ক্যাপচারিত "ভেরিয়েবলগুলির সম্ভাব্য ব্যতিক্রমগুলি বাদ দিয়ে) বিচ্ছিন্ন করা হয়েছে) সাথে সম্পূর্ণরূপে একমত হতে পারি না। একটি স্ট্যাটিক পদ্ধতিতে ঘোষিত একটি ফাইল হ্যান্ডেল বিবেচনা করুন। তারপরে কোনও থ্রেড হ্যান্ডেলটি অ্যাক্সেস করতে পারে যখন অন্য কোনও থ্রেড এটি ব্যবহার করে। এটি অপ্রত্যাশিত আচরণের দিকে পরিচালিত করবে। বা আপনার "ক্যাপচার" ভেরিয়েবল বলতে "ফাইল হ্যান্ডেল" বোঝায়।
প্রভাকরণ

9
@ প্রভাকরণ যদি কোনও ফাইল হ্যান্ডেল কোনও পদ্ধতিগত পরিবর্তনশীল হয় তবে এটি কেবল সেই কলারের কাছেই যায়। অন্য যে কোনও কলকারী একটি ভিন্ন ভেরিয়েবলের সাথে কথা বলছেন (পদ্ধতি ভেরিয়েবলগুলি প্রতি কল হিসাবে রয়েছে)। এখন, অন্তর্নিহিত ফাইলটিতে অ্যাক্সেস একটি পৃথক সমস্যা, তবে এটি সি # বা .নেটের সাথে সম্পর্কিত নয়। যদি হ্যান্ডেলটি ভাগ না করা হয়, তবে এই পরিস্থিতিটি যদি দেখা যায় তবে কোনও একরকম মুটেক্স / লক আশা করা যায় expect
মার্ক গ্র্যাভেল

29

হ্যাঁ, এটি কেবল ভাগ্য। ;)

পদ্ধতিটি স্থিতিশীল কিনা তা বিবেচ্য নয়, ডেটা স্থিতিশীল হয় কি না তা বিবেচ্য।

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

যখন পৃথক দৃষ্টিতে আপনার ডেটাগুলি এখনও মিশ্রিত হয়ে যায়, সম্ভবত এটি সম্ভবত ডেটা পৃথক নয়।


7
লাইন পছন্দ - It doesn't matter if the method is static or not, what matters is if the data is static or not। কেবল যোগ করার জন্য, একটি স্থির পদ্ধতির আওতায় স্থানীয় ভেরিয়েবলগুলি ডেটা সেই অংশটি গঠন করে না যা প্রদত্ত দৃশ্যে আমাদের উদ্বিগ্ন হওয়া দরকার।
আরবিটি

দুর্দান্ত উত্তর অনেক সাহায্য করেছে।
ভাঙ্গা

15

স্ট্যাটিক পদ্ধতি একাধিক থ্রেডের জন্য সূক্ষ্ম হওয়া উচিত।

অন্যদিকে স্থিতিশীল ডেটা সমস্যার কারণ হতে পারে কারণ বিভিন্ন থ্রেড থেকে একই ডেটা অ্যাক্সেস করার চেষ্টা নিয়ন্ত্রণ করতে হবে তা নিশ্চিত করার জন্য যে একবারে কেবল একটি থ্রেড তথ্য পড়ছে বা লিখছে।


4
এখানে
মূলশব্দটি

4
একই সাথে পড়া ঠিকঠাক, তবে একই সাথে পড়া এবং লেখা একযোগে অপ্রত্যাশিত আচরণের দিকে পরিচালিত করবে
ফ্রিস্টাইল ০

10

এমএসডিএন সর্বদা বলে:

এই ধরণের যে কোনও পাবলিক স্ট্যাটিক (ভিজ্যুয়াল বেসিকের মধ্যে ভাগ করা) সদস্যরা থ্রেড নিরাপদ। কোনও উদাহরণ সদস্যদের থ্রেড নিরাপদ থাকার গ্যারান্টি নেই।

সম্পাদনা: এখানকার ছেলেরা যেমন বলে, সবসময় হয় না এবং স্পষ্টতই এটি ছাত্রলীগের এইভাবে ডিজাইন করা ক্লাসগুলির ক্ষেত্রে প্রযোজ্য, ব্যবহারকারী তৈরি ক্লাসগুলিতে নয় যেখানে এটি প্রয়োগ হয় না।


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

@ মারকোট, বিপরীতটি সত্য নয়? দৃষ্টান্তের সদস্যরা নিরাপদ কারণ প্রতি উদাহরণে একটি রয়েছে। তবে স্থির সদস্যরা নিরাপদে থ্রেড নেই কারণ তারা এই শ্রেণীর সমস্ত দৃষ্টান্তের মধ্যে ভাগ করে নেওয়া হয়েছে? quora.com/…
ভাঙ্গা

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

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