• 死锁 必然


    问题:      写一个“必然”会出现死锁的一段代码,我面过很多人,他们写的都不是严格意义上的死锁,都被我挑出来很多刺。

    一:

    多线程的话可以用信号量 
    1 锁 A,2 锁 B 
    1 给 2 发信号,2 给 1 发信号 
    等到收到信号,1 锁 B,2 锁 A   (这里,要等到对方同意才可以锁。比如:1现在锁A,通过信号量,要等2同意才可以锁B。所以就不存在当1速度快,同时锁AB)

    因为各自没有取得锁前不会发出信号,因此收到信号就可以保证死锁 
    信号量可以使用操作系统的信号量,也可以使用原子变量简单实现 

    这不是一道考锁的题,而是一道考分布式系统事件排序的题 。

    非重入锁重入就是保证死锁

    二:

    用睡眠并不会必然导致死锁,只是以非常高的概率导致而已。 

    一个简单的方法是这样:线程 1 把自己的 handle 存在全局变量的 1 里,然后启动线程 2 并获得其 handle,然后等待这个 handle (等线程 2 结束);线程 2 的惟一工作是等待线程 1 的 handle。很容易证明,无论怎样调度,一定会进入死锁。 

    在没有单进程多线程概念的操作系统(如传统 UNIX ),你需要通过进程的等待完成类似任务。所以,看上面就行。

  • 相关阅读:
    columns布局应用场景
    flex速记
    css属性选择器模糊匹配
    ydui的rem适配方案
    vscode搜索失效问题
    ESP8266 超声波测距模块HC-SR04
    树莓派PICO Wifi 无线网卡 esp82666接线图
    查看数据库容量大小
    面试官问我JVM内存结构,我真的是
    深入浅出Java内存模型
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/9082163.html
Copyright © 2020-2023  润新知