当前位置:首页 > 百科

Lock

lock 应好便致波确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则律次阶米预怕它将一直等待(即被阻止),直到该对象被释放。

线程处理(车东那革助太C# 编程指南) 这节讨论了线程处理。

lock 调用来自块开始位置的 Enter 和块结束位置的 Exit

通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。

  • 中文名称 Lock
  • 含义 计算机语言中的函数之一
  • 功能 设置文件共享锁
  • 用法 int lock

简介

  计算机语言中的函数之一

  函数名: lock

  功 能: 设置文件共享锁

  用 法: int lock(int handle, long 又够offset, long 关切年除阳自政准length);

  lock 在机械式(POPPING)中 表示的是锁架程序例 #include

  int main(void)

  {

  int handle, status;

  long length;

  /* M世材有马段比磁念调杨ust have DOS Share.exe loaded for */

  /* file locking to function properly */

  handle = sopen("c:\\autoexec.来自bat",

  O_RDONLY,SH_DENYNO,S_IREAD);

  if (handle < 0)

  {

  printf("sopen failed\n")培单;

  exit(1);

  }

对武然罪研  length = filelength(handle);

本土陈定右杂城宜温激且  status = lock(handle,0L,len360百科gth/2);

  if (status == 0)

  printf("lock succeeded\n");

  else

  printf("lock failed\n");

  status = unlock(handle,0L,length/2);

  if (status == 0)

  pri现敌诉给其夜行留ntf("unlock succeeded\n");

  else

  printf("unlock failed\n");

  close(handle);

  return 0;

  }

  C#程序例

  lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。

  线程处理(C# 编程指南) 这节讨论了线程处理。

  lock 调用块开始位置的 Enter 和块结束位置的 Exit。

  通常,应避免锁定 public 类型,否则实例将超出去析稳推构卷波得说代码的控制范围。常见的结构 lock (this)、lock 转限置激划(typeof (MyType)) 和 lock ("myLock") 违反此准则:

  如果实例可以被公共访问,将出现 lock (this) 问题。

  如果 MyType 可以被公共访问,将出现 lock (typeof (MyType)) 问题。

  由于进官移棉应究世感势程中使用同一字符串的任何其看责他代码将共享同一个锁,所以出现 lock("myLock") 问题。

 世速察斤宁费影切灯光频 最佳做法是定义 private 对象来锁定, 或 private shared 对象变量来保护所有实例所共有的数据。

  // statements_lock.cs

  using System;

  using System.单亮基直善贵露Threading;

  class ThreadTest

  {

  public void RunMe()

  {

  Console.WriteLine("RunMe called");

  }

  static void Main()

  {

  ThreadTest b = new ThreadTest();

  Thread t = new Thread(b.RunMe);

  t.Start();

  }

  }

  输出

  RunMe called

  下例使用线程和 lock。只要 lock 语句存在,语句块就是临界区并且 balance 永远不会是负数。

  // statements_lock2.cs

  using System;

  using System.Threading;

  class Account

  {

  private Object thisLock = new Object();

  int balance;

  Random r = new Random();

  public Account(int initial)

  {

  balance = initial;

  }

  int Withdraw(int amount)

  {

  // This condition will never be true unless the lock statement

  // is commented out:

  if (balance < 0)

  {

  throw new Exception("Negative Balance");

  }

  // Comment out the next line to see the effect of leaving out

  // the lock keyword:

  lock(thisLock)

  {

  if (balance >= amount)

  {

  Console.WriteLine("Balance before Withdrawal : " + balance);

  Console.WriteLine("Amount to Withdraw : -" + amount);

  balance = balance - amount;

  Console.WriteLine("Balance after Withdrawal : " + balance);

  return amount;

  }

  else

  {

  return 0; // transaction rejected

  }

  }

  }

  public void DoTransactions()

  {

  for (int i = 0; i < 100; i++)

  {

  Withdraw(r.Next(1, 100));

  }

  }

  }

  class Test

  {

  static void Main()

  {

  Thread[] threads = new Thread[10];

  Account acc = new Account(1000);

  for (int i = 0; i < 10; i++)

  {

  Thread t = new Thread(new ThreadStart(acc.DoTransactions));

  threads[i]= t;

  }

  for (int i = 0; i < 10; i++)

  {

  threads[i].Start();

  }

  }

  }

lock 命令详解

用途

  保留(reserve)终端。

语法

  lock [ -Timeout ]

描述

  lock 命令请求用户密码、读取并第二次请求密码以进行验证。在此期间,该命令会锁定终端,直到第二次接收到密码或以下的一条发生,才会释放它:

  * 超出了超时间隔。

  * 有着相应许可的用户杀死了该命令。

  超时的缺省值为 15 分钟,但是可以使用 -Timeout 标志进行修改。

标志

  -Timeout Timeout 参数指定,以分钟的形式表示了超时间隔。缺省值为 15 分钟。

  示例

  1. 为了将终端保留在密码控制下,请输入:

  lock

  系统会提示两次要求密码,以便其能够验证。如果密码没有在 15 分钟内重复,命令将超时。

  2. 为了将终端保留在密码控制下,并且超时间隔为 10 分钟,请输入:

  lock -10

  文件

  /usr/bin/lock 包含了 lock 命令。<i id="bks_bltfoecb">

  VB-----------------------------------------

  限制其他程序对文件的存取格式

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com
标签:

  • 关注微信
上一篇:桐庐女儿村
下一篇:梗死

相关文章