using System;
class Program
{
private static volatile bool _flag = false;
public static void Main()
{
Thread t1 = new Thread(new ThreadStart(Writer));
Thread t2 = new Thread(new ThreadStart(Reader));
t1.Start();
t2.Start();
t1.Join();
t2.Join();
}
private static void Writer()
{
// 模拟一些工作
Thread.Sleep(1000);
_flag = true;
Console.WriteLine("Writer set flag to true.");
}
private static void Reader()
{
while (!_flag)
{
// 等待_flag变为true
}
Console.WriteLine("Reader sees flag as true.");
}
}
volatile 关键字:
volatile
关键字用于声明字段可能会被多个线程以不可预测的方式进行访问和修改。它确保对字段的读写操作不会被编译器或处理器优化掉,从而保证了线程之间的可见性。_flag 变量:
_flag
是一个布尔类型的 volatile
变量,用于在两个线程之间传递信号。Writer
线程设置 _flag
为 true
,而 Reader
线程等待 _flag
变为 true
。Writer 方法:
Writer
方法模拟了一些工作(通过 Thread.Sleep(1000)
),然后将 _flag
设置为 true
,并打印一条消息表示已设置标志。Reader 方法:
Reader
方法在一个循环中不断检查 _flag
的值,直到它变为 true
。一旦 _flag
变为 true
,它会打印一条消息表示已看到标志为 true
。多线程:
Thread
类创建了两个线程:一个用于 Writer
方法,另一个用于 Reader
方法。Join
方法确保主线程等待这两个子线程完成后再继续执行。这个示例展示了如何使用 volatile
关键字来确保线程之间的变量可见性,避免由于编译器或处理器优化导致的潜在问题。
上一篇:c#二维数组
下一篇:c# modbus
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站