মাল্টি-থ্রেডেড রেসের শর্তাদি পরীক্ষা করা


54

এই উত্তরে মন্তব্যগুলি পড়া , বিশেষত:

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

@ কোডসআইএনচওস যদি এটি পুনরুত্পাদন করা না হয় তবে 'ফিক্স' কন্টেন্টে লিখিত কোডটিও পরীক্ষা করা হবে। এবং অনির্ধারিত কোডটি লাইভে স্থাপন করা আমার মতে আরও খারাপ অপরাধ - রাইসডাব্লু 5 ঘন্টা আগে

... আমাকে ভাবছে যে টেস্টের ক্ষেত্রে রেসের অবস্থার কারণে উত্পাদনের সমস্যাগুলিতে ধারাবাহিকভাবে খুব কম ঘটনা ঘটতে পারে এমন কোনও সাধারণ সাধারণ উপায় আছে কিনা?


1
উভয় প্রান্তে নির্দেশের মাধ্যমে পদক্ষেপ (সমাবেশ) পদক্ষেপ
ratchet freak

1
স্থির বিশ্লেষণ প্রায়শই সম্ভাব্য ইউবি প্রদর্শন করতে পারে, এটি পরীক্ষার হিসাবে গণ্য করা হয় কিনা তা পরিষ্কার নয়
জে কে।

জিজ্ঞাসা করে দুঃখিত, তবে 'ইউবি' বলতে কী বোঝায়?
ডগ

2
চমৎকার প্রশ্ন, আমি এর সম্ভাব্য সমাধানগুলি দেখে আগ্রহী হব।
RhysW

1
@ ডগ অনির্ধারিত আচরণ, যা অন্তর্ভুক্ত করতে পারে তবে রেস শর্ত
জে কে

উত্তর:


85

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

না।

পরীক্ষার ক্ষেত্রে রেসের শর্তটি ট্রিগার করার জন্য ভাল কোনও সাধারণ উপায় নেই।

আপনার একমাত্র আশা এটি আপনার সিস্টেমের বাইরে সম্পূর্ণরূপে ডিজাইন করা design

যখন এবং আপনি যদি দেখেন যে অন্য কেউ স্টাফ করেছে, আপনার তাকে এন্টিল খাড়া করা উচিত, এবং তারপরে এটি মুছে ফেলার জন্য পুনরায় ডিজাইন করুন। আপনি আপনার সিস্টেমের বাইরে তাঁর মিথ্যা পাস (উচ্চারণ চ *** আপ) ডিজাইন করার পরে, আপনি পিঁপড়ে থেকে তাকে ছেড়ে যেতে পারেন। (পিঁপড়াগুলি যদি ইতিমধ্যে কেবল হাড় ফেলে রেখে তাকে গ্রাস করে ফেলেছে, তবে "স্যুইজজেড প্রকল্পে জাতিদের অবস্থা তৈরি করা লোকদের ক্ষেত্রে এটিই ঘটে!" এবং তাকে সেখানে ছেড়ে দিন বলে একটি চিহ্ন দিন)


22
আমি পুরোপুরি একমত. অন্য কথায়, এটি অনেকটা রসিকতার মতো - রোগী: "ডাক্তার, আমি যখন এটি করি তখন ব্যথা হয় ..." ডাক্তার: "তাহলে এটি করা বন্ধ করুন!"
মার্ক রুশাকফ

চমৎকার উত্তর. যদি কোনও কিছু পরীক্ষার যোগ্য সমস্যার কারণ হয়ে থাকে, শুরু করার জন্য এটির চারপাশে কাজ করার চেষ্টা করুন, সমস্যাটি পুরোপুরি এড়িয়ে চলুন!
RhysW

আমার একমাত্র প্রশ্ন: আমার কত বড় একটি অ্যান্থিল ব্যবহার করা উচিত? (+1 বিটিডাব্লু)।
পিটার কে।

15
ভুল প্যাসের সঠিক উচ্চারণের জন্য +1 । (এবং উত্তরটির বাকী
অংশটি

1
@PeterK।, এই মনিটর, র্যাম, এবং ডিস্ক ড্রাইভ, যেখানে বড় সহ সফটওয়্যার উন্নয়ন ঐ কিছু ক্ষেত্রে এক, IS ভালো।
জন আর স্ট্রোহম

16

আপনি যদি এমএস টুল চেইনে থাকেন। মিসেস গবেষণা একটি টুল যা প্রতিটি চালানোর জন্য নতুন interlevings বাধ্য করা হবে এবং ব্যর্থ recreated করতে তার নামক রান সৃষ্টি করেছেন দাবা

এখানে এটি ব্যবহৃত একটি ভিডিও রয়েছে


5
এটি চিত্তাকর্ষক দেখায়; কিছু সময় চেষ্টা করার জন্য আমাকে সময় বের করতে হবে।
ড্যান নীলি

16

এই ধরণের সমস্যার জন্য আমি যে সেরা সরঞ্জামটি জানি তা হ'ল হ্রগ্রিন্ড নামে ভালগ্রাইন্ডের একটি বর্ধন ।

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

ইন্টেল ইন্টেল ইন্সপেক্টর নামে একটি খুব অনুরূপ সরঞ্জাম বিক্রি করে ।

এই সরঞ্জামগুলি দুর্দান্ত ফলাফল দেয় তবে বিশ্লেষণের সময় আপনার প্রোগ্রামটি যথেষ্ট ধীর হবে।


1
ভালগ্রিন্ড কি এখনও একটি * নিক্স কেবলমাত্র সরঞ্জাম?
ড্যান নীলি

1
হ্যাঁ, লিনাক্স, ম্যাকসএক্সএক্স, অ্যান্ড্রয়েড এবং কিছু BSD: valgrind.org/info/platforms.html
জুলিয়ান

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

7

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

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


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

6

বিভিন্ন ধরণের অপরিজ্ঞাত আচরণের (বিশেষত বর্ণের অবস্থার মধ্যে) অস্তিত্ব নেই তা পুরোপুরি নিশ্চিত হওয়ার কোনও উপায় নেই।

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

এই উদ্দেশ্যে কিছু আকর্ষণীয় সরঞ্জাম:

ভালগ্রাইন্ড একটি মেমরি পরীক্ষক check এটি মেমরি ফাঁস, অবিচ্ছিন্ন মেমরি পড়ার, ঝুঁকির পয়েন্টারগুলির ব্যবহার এবং সীমার বাইরে প্রবেশের সন্ধান করে।

হেলগ্রিন্দ একটি থ্রেড সুরক্ষা পরীক্ষক safety এটি জাতি শর্ত খুঁজে।

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

ইউবিএস একটি অনির্ধারিত আচরণ চেকার। এটি সি এবং সি ++ অপরিবর্তিত আচরণের বিভিন্ন ক্ষেত্রে যেমন পূর্ণসংখ্যার ওভারফ্লোস, সীমার বাইরে স্থান পরিবর্তন এবং অনুরূপ স্টাফগুলির সন্ধান করে।

এমএসান একটি মেমরি পরীক্ষক। ভালগ্রাইন্ডের মতো এটিরও লক্ষ্য রয়েছে।

টিসান একটি থ্রেড সুরক্ষা পরীক্ষক। হেলগ্রাইন্ডের মতো এরও লক্ষ্য রয়েছে।

এই তিনটি Clang সংকলক মধ্যে নির্মিত এবং সংকলন সময়ে কোড উত্পন্ন। এর অর্থ হল যে আপনাকে সেগুলি আপনার বিল্ড প্রক্রিয়াতে সংহত করা দরকার (বিশেষত, আপনি ক্ল্যাংয়ের সাথে সংকলন করতে হবে), যা প্রাথমিকভাবে * গ্রাইন্ডের তুলনায় সেটআপ করা আরও কঠিন করে তোলে, তবে অন্যদিকে তাদের রানটাইম ওভারহেডের চেয়ে অনেক কম।

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


1

এখানে বেশিরভাগ উত্তরই এই প্রশ্নটিকে ভুল হিসাবে মনে হচ্ছে "আমি স্বয়ংক্রিয়ভাবে জাতি শর্তগুলি কীভাবে আবিষ্কার করব?" যখন প্রশ্নটি সত্যিই হয় "আমি যখন জাতিগুলির শর্তগুলি খুঁজে পাই তখন তাদের কীভাবে পুনরুত্পাদন করব?"

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

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

এখানে উত্তরটি পাইথনের প্রসঙ্গে এই ধরণের জিনিসটি বিশদভাবে ব্যাখ্যা করে: https://stackoverflow.com নিশ্বাস ভাবে

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