ในกรณีนี้ ฉันกำหนด dirty read ว่าเป็นการอ่านจากหน่วยความจำ เมื่อเธรดอื่นกำลังเขียนถึงเธรดอื่น
ดังนั้นหากเธรด #1 เขียน 100 ไปยังตัวแปรที่เธรด #2 สามารถมองเห็นได้ นั่นจะเขียน 50 ไปยังตัวแปรเดียวกัน โดยที่ทั้งสองเธรดทำในลักษณะวนซ้ำ
เป็นไปได้ไหมที่จะอ่านตัวแปรแล้วได้ตัวเลขที่ไม่ใช่ 50 หรือ 100? ไม่มีการล็อค ฯลฯ สำหรับการซิงค์
รายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่าของฉัน: Intel i3 CPU ฉันกำลังเขียนโปรแกรมใน C#
ด้านล่างนี้เป็นตัวอย่างของสิ่งที่ฉันหมายถึง:
using System;
using System.Collections.Generic;
using System.Threading;
namespace Threading001
{
class Program
{
static void Main(string[] args)
{
long min = long.MinValue;
long max = long.MaxValue;
object number = max;
new Thread(() =>
{
long current2 = (long)number;
if (current2 != min && current2 != max)
{
Console.WriteLine("Unexpected number from thread 2: {0}.", current2);
}
number = min;
}).Start();
while (true)
{
long current = (long)number;
if (current != min && current != max)
{
Console.WriteLine("Unexpected number from thread 1: {0}.", current);
}
number = max;
}
}
}
}
ฉันสร้าง number วัตถุเพื่อให้หน่วยความจำได้รับการจัดสรรบนฮีป ไม่ใช่สแต็กเพื่อพยายามเพิ่มเวลาแฝงในการเข้าถึงหน่วยความจำ การแคชซีพียูอาจจะหยุดสิ่งนั้นต่อไป