热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#中的volatile关键字

volatile关键字指示一个字段可以由多个同时执行的线程修改。声明为volatile的字段不受编译器优化(假定由单个线程访问)的限制。这样可以确保该字

volatile 关键字指示一个字段可以由多个同时执行的线程修改。 声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制。 这样可以确保该字段在任何时间呈现的都是最新的值。

volatile 修饰符通常用于由多个线程访问、但不使用 lock 语句对访问进行序列化的字段。

volatile 关键字可应用于以下类型的字段:

  • 引用类型。

  • 指针类型(在不安全的上下文中)。 请注意,虽然指针本身可以是可变的,但是它指向的对象不能是可变的。 换句话说,不能声明“指向可变对象的指针”。

  • 类型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。

  • 具有以下基类型之一的枚举类型:byte、sbyte、short、ushort、int 或 uint。

  • 已知为引用类型的泛型类型参数。

  • IntPtr 和 UIntPtr。

可变关键字仅可应用于类或结构的字段。 不能将局部变量声明为 volatile

示例

下面的示例说明如何将公共字段变量声明为 volatile

class VolatileTest
{
public volatile int i;public void Test(int _i){i = _i;}
}

 

示例

下面的示例演示如何创建辅助线程,并用它与主线程并行执行处理。 有关多线程处理的背景信息,请参阅 线程和线程。

using System;
using System.Threading;public class Worker
{
// This method is called when the thread is started.public void DoWork(){while (!_shouldStop){Console.WriteLine("Worker thread: working...");}Console.WriteLine("Worker thread: terminating gracefully.");}public void RequestStop(){_shouldStop = true;}// Keyword volatile is used as a hint to the compiler that this data// member is accessed by multiple threads.private volatile bool _shouldStop;
}
public class WorkerThreadExample
{
static void Main(){// Create the worker thread object. This does not start the thread.Worker workerObject = new Worker();Thread workerThread = new Thread(workerObject.DoWork);// Start the worker thread.
workerThread.Start();Console.WriteLine("Main thread: starting worker thread...");// Loop until the worker thread activates.while (!workerThread.IsAlive) ;// Put the main thread to sleep for 1 millisecond to// allow the worker thread to do some work.Thread.Sleep(1);// Request that the worker thread stop itself.
workerObject.RequestStop();// Use the Thread.Join method to block the current thread // until the object's thread terminates.
workerThread.Join();Console.WriteLine("Main thread: worker thread has terminated.");}// Sample output:// Main thread: starting worker thread...// Worker thread: working...// Worker thread: working...// Worker thread: working...// Worker thread: working...// Worker thread: working...// Worker thread: working...// Worker thread: terminating gracefully.// Main thread: worker thread has terminated.
}

 



推荐阅读
author-avatar
天云2_776
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有