এই আচরণের সম্মিলিত বোঝার জন্য আমার অবদান এখানে ... এটি খুব বেশি নয়, কেবল একটি এক্সপ্লোরেশন (এক্সকিপ এর ডেমোর উপর ভিত্তি করে) যা একটি উদ্বায়ী শ্লোকগুলির আচরণকে একটি অ-উদ্বায়ী (অর্থাত্ "স্বাভাবিক") অন্তর্নিহিত মান দেখায় পাশাপাশি, একই প্রোগ্রামে ... আমি যখন এই থ্রেডটি পেয়েছিলাম তখন যা আমি খুঁজছিলাম।
using System;
using System.Threading;
namespace VolatileTest
{
class VolatileTest
{
private volatile int _volatileInt;
public void Run() {
new Thread(delegate() { Thread.Sleep(500); _volatileInt = 1; }).Start();
while ( _volatileInt != 1 )
;
Console.WriteLine("_volatileInt="+_volatileInt);
}
}
class NormalTest
{
private int _normalInt;
public void Run() {
new Thread(delegate() { Thread.Sleep(500); _normalInt = 1; }).Start();
while ( _normalInt != 1 )
;
Console.WriteLine("_normalInt="+_normalInt);
}
}
class Program
{
static void Main() {
#if DEBUG
Console.WriteLine("You must run this program in Release mode to reproduce the problem!");
#endif
new VolatileTest().Run();
Console.WriteLine("This program will now hang!");
new NormalTest().Run();
}
}
}
উপরে কিছু দুর্দান্ত চমত্কার ব্যাখ্যা রয়েছে, পাশাপাশি কিছু দুর্দান্ত রেফারেন্স রয়েছে। আমাকে আমার মাথা ঘুরিয়ে আনতে সাহায্য করার জন্য সকলকে ধন্যবাদ volatile
( volatile
আমার প্রথম প্রবৃত্তিটি কোথায় ছিল lock
তার উপর নির্ভর করতে না পারার পক্ষে পর্যাপ্ত পরিমাণে জানা )।
চিয়ার্স, এবং সমস্ত মাছের জন্য ধন্যবাদ। কিথ।
দ্রষ্টব্য: "আমি দেখতে চাই: আমি খুব আসল অনুরোধের একটি ডেমো, যা ছিল আগ্রহী হতে চাই একটি স্ট্যাটিক উদ্বায়ী int- এ সঠিকভাবে আচরণ যেখানে একটি স্ট্যাটিক int- এ খারাপ।
আমি এই চ্যালেঞ্জটি চেষ্টা করেছি এবং ব্যর্থ হয়েছি। (আসলে আমি বেশ তাড়াতাড়ি ছেড়ে দিয়েছি ;-)। আমি স্থিতিশীল ভারগুলির সাথে চেষ্টা করেছিলাম তারা উদ্বিগ্ন কিনা তা নির্বিশেষে তারা "সঠিকভাবে" আচরণ করে ... এবং আমি কেন ঘটনার ব্যাখ্যাটি পছন্দ করব, যদি সত্যিই ঘটনাটি ঘটে ... তবে তা কি সংকলকটি রেজিস্টারগুলিতে স্থির ভারগুলির মানগুলিকে ক্যাশে করে না (অর্থাত্ এটি পরিবর্তে ap শিক -ঠিকানাটির একটি রেফারেন্সকে ক্যাশে করে)?
না এটি কোনও নতুন প্রশ্ন নয় ... এটি সম্প্রদায়টিকে মূল প্রশ্নের দিকে ফিরিয়ে আনার চেষ্টা।