| 网站首页 | 硬件维修 | 应用学院 | 网络组建 | 网站制作 | 菜鸟黑客 | 编程之道 | 数码大全 | 娱乐休闲 | 软件下载 | 在线视频 | 请您留言 | 技术论坛 | 
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
  • IP分片重组的分析和常见碎片…

  • 用C语言轻松编写QQ挂机王

  • 网络安全基础 教你怎样关闭网…

  • 服务器安全:防范拒绝服务攻击…

  • 菜鸟必读之邮箱及IE安全技巧…

  • 解除安全隐患—让“命令提示…

  • 怀疑PC安装木马?学学网络安…

  • 预防DDoS攻击的十项安全策略

  • 服务器安全:防范拒绝服务攻击…

  • 网络安全之特洛伊木马攻防战…

  • Q
    您现在的位置: 我是IT人 >> 菜鸟黑客 >> 黑客攻防 >> 文章正文
    安全编程: 避免竞争条件(1)           
    安全编程: 避免竞争条件(1)
    作者:网络 文章来源:转载 点击数: 更新时间:2006-1-19
    [ 字体:缩小 正常 放大 | 双击自动滚屏 ]
    请选择合适的字体颜色:

      为了理解竞争条件,让我们首先来看一个非常普通的 C 声明:

    清单 1. 普通的 C 声明

    b = b + 1;

      看起来非常简单,不是吗?但是,让我们假定有两个线程在运行这一行代码,在这里,“b”是一个由两个线程共享的变量,“b”的初始值为“5”。以下是一个似是而非的执行次序:

    清单 2. 使用共享的“b”的可能执行次序

    (thread1) load b into some register in thread 1.
        (thread2) load b into some register in thread 2.
    (thread1) add 1 to thread 1's register, computing 6.
        (thread2) add 1 to thread 2's register, computing 6.
    (thread1) store the register value (6) to b.
        (thread2) store the register value (6) to b.

      初始值为 5,然后两个线程分别加 1,但是最终的结果是 6... 而不是应该得到的 7。问题在于,两个线程互相干扰,从而导致产生错误的最终答案。

      通常,线程不是以原子的方式执行的;另一个线程可以在任何两个指令期间打断它,而且还可以使用一些共享的资源。如果一个安全程序的线程没有预防这些中断,那么另一个线程就可以干扰该安全程序的线程。在安全程序中,不管在任何一对指令中间运行了多少其他线程的代码,程序都必须正确地运行。关键是,当您的程序访问任意资源时,要确定其他某个线程是否可能因为使用该资源对您的程序造成干扰。


    解决竞争条件

      竞争条件的典型解决方案是,确保程序在使用某个资源(比如文件、设备、对象或者变量)时,拥有自己的专有权。获得某个资源的专有权的过程称为加锁。锁不太容易处理。死锁(“抱死,deadly embrace”)是常见的问题,在这种情形下,程序会因等待对方释放被加锁的资源而无法继续运行。要求所有线程都必须按照相同的顺序(比如,按字母排序,或者从“largest grain”到“smallest grain”的顺序)获得锁,这样可以避免大部分死锁。另一个常见问题是活锁(livelock),在这种情况下,程序至少成功地获得和释放了一个锁,但是以这种方式无法将程序再继续运行下去。如果一个锁被挂起,顺利地释放它会很难。简言之,编译在任何情况下都可以按需要正确地加锁和释放的程序通常很困难。

      有时,可以一次执行一个单独操作来完成一些特殊的操作,从而使您不需要显式地对某个资源进行加锁而后再解锁。这类操作称为“原子”操作,只要能够使用这类操作,它们通常是最好的解决方案。

      有一些错误是如此常见,所以,为了避免犯这些错误,您需要了解它们。一个问题是,以不总是锁定某资源的方式创建锁文件;您应该学习如何正确创建它们,或者转而采取不同的加锁机制。您还需要正确地处理文件系统中的竞争,其中包括如何处理永远危险的共享目录 /tmp 和 /var/tmp,以及如何安全地使用信号。下一章中将描述如何安全使用它们。

    上一页  [1] [2] 

    文章录入:54iter    责任编辑:54iter 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 关于我们 | 友情链接 | 版权申明 |