Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# volatile

作者:寂寞算什么   发布日期:2025-03-07   浏览:200

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.");
    }
}

解释说明

  1. volatile 关键字:

    • volatile 关键字用于声明字段可能会被多个线程以不可预测的方式进行访问和修改。它确保对字段的读写操作不会被编译器或处理器优化掉,从而保证了线程之间的可见性。
  2. _flag 变量:

    • _flag 是一个布尔类型的 volatile 变量,用于在两个线程之间传递信号。Writer 线程设置 _flagtrue,而 Reader 线程等待 _flag 变为 true
  3. Writer 方法:

    • Writer 方法模拟了一些工作(通过 Thread.Sleep(1000)),然后将 _flag 设置为 true,并打印一条消息表示已设置标志。
  4. Reader 方法:

    • Reader 方法在一个循环中不断检查 _flag 的值,直到它变为 true。一旦 _flag 变为 true,它会打印一条消息表示已看到标志为 true
  5. 多线程:

    • 使用 Thread 类创建了两个线程:一个用于 Writer 方法,另一个用于 Reader 方法。Join 方法确保主线程等待这两个子线程完成后再继续执行。

这个示例展示了如何使用 volatile 关键字来确保线程之间的变量可见性,避免由于编译器或处理器优化导致的潜在问题。

上一篇:c#二维数组

下一篇:c# modbus

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

.net和c#

c#游戏开发

c#网络编程

c# rectangle

c# if else

c# rtsp

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站