.net中的System.Threading.Interlocked类可以为多个线程共享的变量提供原子操作

   .net中的System.Threading命名空间的Interlocked类可以为多个线程共享的变量提供原子操作。

      经验显示,那些需要在多线程下被保护的资源通常是整型的,而这些被共享的整型值最常见的操作就是增加、减少。Interlocked类提供了一个专门的机制用于完成这些特定的操作。

      下面的例子是一个没有使用Interlocked类的操作:

      class Program
    {
        static long counter = 1;
        static void Main(string[] args)
        {
            System.Threading.Thread t1 = new System.Threading.Thread(f1);
            System.Threading.Thread t2 = new System.Threading.Thread(f2);
            t1.Start();
            t2.Start();
            t1.Join();
            t2.Join();
            System.Console.Read();
        }

        static void f1)
        {
            for (int i = 1; i <= 1000; i++)
            {
                counter++;
                System.Console.WriteLine("Counter++ {0}", counter);
                System.Threading.Thread.Sleep(10);
            }
        }
        static void f2)
        {
            for (int i = 1; i <= 1000; i++)
            {
                counter--;
                System.Console.WriteLine("Counter++ {0}", counter);
                System.Threading.Thread.Sleep(10);
            }
        }
    }

      最后的结果counter的值为2,如果我们是用单线程操作的话counter的值应该是1,下面的例子是使用Interlocked类的:

class Program
    {
        static long counter = 1;
        static void Main(string[] args)
        {
            System.Threading.Thread t1 = new System.Threading.Thread(f1);
            System.Threading.Thread t2 = new System.Threading.Thread(f2);
            t1.Start();
            t2.Start();
            t1.Join();
            t2.Join();
            System.Console.Read();
        }
        static void f1()
        {
            for (int i = 1; i <= 5; i++)
            {
                Interlocked.Increment(ref counter);
                System.Console.WriteLine("Counter++ {0}", counter);
                System.Threading.Thread.Sleep(10);
            }
        }
        static void f2()
        {
            for (int i = 1; i <= 5; i++)
            {
                Interlocked.Decrement(ref counter);
                System.Console.WriteLine("Counter++ {0}", counter);
                System.Threading.Thread.Sleep(10);
            }
        }
    } 

      这次最后的结果是1。

      在大多数计算机上,增加变量操作不是一个原子操作,需要执行下列步骤:

      1、将实例变量中的值加载到寄存器中。

      2、增加或减少该值。

      3、在实例变量中存储该值。(来自MSDN)

### 如何在操作系统中删除具有 system 权限文件 #### 了解权限管理机制 为了理解如何处理高权限文件,在 Linux 和类 Unix 系统中,存在多层的安全管理体系来保护数据免受未授权访问。这一体系涵盖了从系统层面到具体文件级别的多种措施[^2]。 #### 获取适当权限 对于拥有 `system` 或者说是超级用户(root)级别权限文件来说,普通账户通常不具备修改或移除它们的能力。因此,首要步骤是切换至具备足够权利的身份来进行此类操作: ```bash sudo su - ``` 此命令允许当前用户临时获得 root 用户的权利并进入其 shell 环境。 #### 查看目标文件状态 确认待删文件确实属于特殊权限类别,并检查现有权限设置情况: ```bash ls -l /path/to/file ``` 上述指令可以展示指定路径下的文件详情,包括所有者的名称及其分配给该对象的具体读写执行许可位。 #### 修改文件所有权或权限(必要时) 如果发现无法直接删除,则可能需要调整文件所属关系或是放宽某些限制以便顺利实施下一步动作。请注意这一过程需谨慎行事以免破坏系统稳定性或其他重要资源的安全性。 - 更改文件属主为当前登录账号: ```bash chown $USER /path/to/file ``` - 调整权限使自己能够对其进行更改: ```bash chmod u+w /path/to/file ``` #### 执行删除操作 当已经获得了足够的权限之后,就可以尝试通过简单的 rm 命令去除不需要的对象了: ```bash rm -f /path/to/file ``` 这里 `-f` 参数用于强制模式下工作,即使遇到不存在的目标也不会报错终止程序运行。 #### 验证结果 最后一步是要确保文件已被成功清除掉,可以通过再次查看原位置是否存在相同名字的新实体来做简单检验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值