线程同步的方式和机制
临界区、互斥区、事件、信号量四种方式
临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别
1、
临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访
问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。
2、互斥量:采用互斥对象机制。只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享
3、信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目
4、事件:通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作
这样答就可以了给分吧
推理过程:
从左是第一间房子开始:
首先通过挪威人住第一间房,挪威人住蓝色房子隔壁,能推出来左边第一间住的是挪威人,他旁边第二间是蓝色房间
就有这样的结论:
房间颜色:未知蓝色未知未知未知
居住者:挪威人未知未知未知未知
然后再通过绿色房子在白色房子左面这句话可以推出来,白色房间不是第四间就是第五间,同样绿色房子不是第三间就是第四间
就有这样的结论:
房间颜色:未知蓝色可能绿色可能绿色可能白色可能白色
居住者:挪威人未知未知未知未知
再通过英国人住红色房子,推出红色房子不是第三间就是第五间
就有这样的结论:
房间颜色:未知蓝色可能红色可能绿色可能绿色可能白色可能红色可能白色
居住者:挪威人未知可能英国人未知可能英国
通过绿色房子主人喝咖啡和住在中间房子的人喝牛奶可以推出绿色房子是第四间房子,白色房子是第五间房子,而中间的就是红色的房子了,还有第一间是黄色的房子:-)
就有这样的结论:
房间颜色:黄色蓝色红色绿色白色
居住者:挪威人未知英国人未知未知
喝:未知未知牛奶咖啡未知
通过黄色房子主人抽Dunhill香烟,养马的人住抽Dunhill香烟的人隔壁和丹麦人喝茶能推出丹麦人不是住第二间房间就是住第五间房间
就有这样的结论:
房间颜色:黄色蓝色红色绿色白色
居住者:挪威人可能丹麦人英国人未知可能丹麦人
喝:未知可能喝茶牛奶咖啡可能喝茶
抽: Dunhill未知未知未知未知
养:未知马未知未知未知
再通过瑞典人养狗可以推出住绿色、白色房子的可能是瑞典人,可能养狗,抽Blue Master的人喝啤酒,可以推出住蓝色和白色的房子的可能喝啤酒,抽Blue Master
就有这样的结论:
房间颜色:黄色蓝色红色绿色白色
居住者:挪威人可能丹麦人英国人可能瑞典人可能丹麦人可能瑞典人
喝:未知可能喝茶牛奶咖啡可能喝茶
可能喝啤酒可能喝啤酒
抽: Dunhill可能Blue Master未知未知可能Blue Master
养:未知马未知可能养狗可能养狗
通过抽Blends香烟的人有一个喝水的邻居,可以推出来挪威人喝水!因为丹麦人不是住在蓝色房子就是住在白色房子里,而丹麦人喝茶,而抽Blue Master的人也不是住在蓝色房子就住在白色房子里,抽Blue Master的人喝啤酒,那么住蓝色房子和白色房子的人虽然不能确定他们喝什么水,但可以肯定的是他们肯定是啤酒和茶这两个选一个,所以肯定是挪威人喝水了,而抽Blends香烟的人一定是住蓝色房间的人,这里需要稍想一下:-)
得出结论:
房间颜色:黄色蓝色红色绿色白色
居住者:挪威人丹麦人英国人可能瑞典人可能瑞典人
喝:水喝茶牛奶咖啡喝啤酒
抽: Dunhill Blends未知未知 Blue Master
养:未知马未知可能养狗可能养狗
通过德国人抽Prince香烟,可以推出德国人住绿色房间,瑞典人住白色房间
得出结论:
房间颜色:黄色蓝色红色绿色白色
居住者:挪威人丹麦人英国人德国人瑞典人
喝:水喝茶牛奶咖啡喝啤酒
抽: Dunhill Blends未知 Prince Blue Master
养:未知马未知未知养狗
再通过抽Pall Mall香烟的人养鸟可以推出住红色房子的人养鸟,抽Pall Mall香烟,而通过抽Blends香烟的人住在养猫的人隔壁可以推出挪威人养猫
得出结论:
房间颜色:黄色蓝色红色绿色白色
居住者:挪威人丹麦人英国人德国人瑞典人
喝:水喝茶牛奶咖啡喝啤酒
抽: Dunhill Blends Pall Mall Prince Blue Master
养:猫马鸟未知养狗
推理完毕!这样就很清楚啦,自然是德国人养鱼了!
线程同步的方式和机制
临界区、互斥区、事件、信号量四种方式
临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别
1、
临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访
问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。
2、互斥量:采用互斥对象机制。只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享
3、信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目
4、事件:通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作
这样答就可以了给分吧
推理过程:
从左是第一间房子开始:
首先通过挪威人住第一间房,挪威人住蓝色房子隔壁,能推出来左边第一间住的是挪威人,他旁边第二间是蓝色房间
就有这样的结论:
房间颜色:未知蓝色未知未知未知
居住者:挪威人未知未知未知未知
然后再通过绿色房子在白色房子左面这句话可以推出来,白色房间不是第四间就是第五间,同样绿色房子不是第三间就是第四间
就有这样的结论:
房间颜色:未知蓝色可能绿色可能绿色可能白色可能白色
居住者:挪威人未知未知未知未知
再通过英国人住红色房子,推出红色房子不是第三间就是第五间
就有这样的结论:
房间颜色:未知蓝色可能红色可能绿色可能绿色可能白色可能红色可能白色
居住者:挪威人未知可能英国人未知可能英国
通过绿色房子主人喝咖啡和住在中间房子的人喝牛奶可以推出绿色房子是第四间房子,白色房子是第五间房子,而中间的就是红色的房子了,还有第一间是黄色的房子:-)
就有这样的结论:
房间颜色:黄色蓝色红色绿色白色
居住者:挪威人未知英国人未知未知
喝:未知未知牛奶咖啡未知
通过黄色房子主人抽Dunhill香烟,养马的人住抽Dunhill香烟的人隔壁和丹麦人喝茶能推出丹麦人不是住第二间房间就是住第五间房间
就有这样的结论:
房间颜色:黄色蓝色红色绿色白色
居住者:挪威人可能丹麦人英国人未知可能丹麦人
喝:未知可能喝茶牛奶咖啡可能喝茶
抽: Dunhill未知未知未知未知
养:未知马未知未知未知
再通过瑞典人养狗可以推出住绿色、白色房子的可能是瑞典人,可能养狗,抽Blue Master的人喝啤酒,可以推出住蓝色和白色的房子的可能喝啤酒,抽Blue Master
就有这样的结论:
房间颜色:黄色蓝色红色绿色白色
居住者:挪威人可能丹麦人英国人可能瑞典人可能丹麦人可能瑞典人
喝:未知可能喝茶牛奶咖啡可能喝茶
可能喝啤酒可能喝啤酒
抽: Dunhill可能Blue Master未知未知可能Blue Master
养:未知马未知可能养狗可能养狗
通过抽Blends香烟的人有一个喝水的邻居,可以推出来挪威人喝水!因为丹麦人不是住在蓝色房子就是住在白色房子里,而丹麦人喝茶,而抽Blue Master的人也不是住在蓝色房子就住在白色房子里,抽Blue Master的人喝啤酒,那么住蓝色房子和白色房子的人虽然不能确定他们喝什么水,但可以肯定的是他们肯定是啤酒和茶这两个选一个,所以肯定是挪威人喝水了,而抽Blends香烟的人一定是住蓝色房间的人,这里需要稍想一下:-)
得出结论:
房间颜色:黄色蓝色红色绿色白色
居住者:挪威人丹麦人英国人可能瑞典人可能瑞典人
喝:水喝茶牛奶咖啡喝啤酒
抽: Dunhill Blends未知未知 Blue Master
养:未知马未知可能养狗可能养狗
通过德国人抽Prince香烟,可以推出德国人住绿色房间,瑞典人住白色房间
得出结论:
房间颜色:黄色蓝色红色绿色白色
居住者:挪威人丹麦人英国人德国人瑞典人
喝:水喝茶牛奶咖啡喝啤酒
抽: Dunhill Blends未知 Prince Blue Master
养:未知马未知未知养狗
再通过抽Pall Mall香烟的人养鸟可以推出住红色房子的人养鸟,抽Pall Mall香烟,而通过抽Blends香烟的人住在养猫的人隔壁可以推出挪威人养猫
得出结论:
房间颜色:黄色蓝色红色绿色白色
居住者:挪威人丹麦人英国人德国人瑞典人
喝:水喝茶牛奶咖啡喝啤酒
抽: Dunhill Blends Pall Mall Prince Blue Master
养:猫马鸟未知养狗
推理完毕!这样就很清楚啦,自然是德国人养鱼了!