理发师悖论

  今天上离散数学的时候老师给我们看来一个小小的故事,其实就是著名的理发师悖论,也就是罗素悖论:在某个城市中有一位理发师,他的广告词是这样写的:“本人的理发技艺十分高超,誉满全城。我将为本城所有不给自己刮脸的人刮脸,我也只给这些人刮脸。我对各位表示热诚欢迎!”来找他刮脸的人络绎不绝,自然都是那些不给自己刮脸的人。可是,有一天,这位理发师从镜子里看见自己的胡子长了,他本能地抓起了剃刀,你们看他能不能给他自己刮脸呢?如果他不给自己刮脸,他就属于“不给自己刮脸的人”,他就要给自己刮脸,而如果他给自己刮脸呢?他又属于“给自己刮脸的人”,他就不该给自己刮脸。

  其实看到这个例子,我就要程序简单的模拟了一下:

public class Person {
	
	private String name;
	
	private boolean isShave;
	
	public boolean getIsShave() {
		
		return isShave;
	}
	
	public void setIsShave(boolean isShave) {
		
		this.isShave = isShave;
	}
	
	public String getName() {
		
		return name;
	}
	
	public void setName(String name) {
		
		this.name = name;
	}
}

 

public class Barber extends Person{

	public void shave(Person person) {
		
		if(person.getIsShave())
			System.out.println(this.getName() + "不可以为" + person.getName() + "剪发");
		else
			System.out.println(this.getName() + "可以为" + person.getName() + "剪发");;
	}
}


 

 

public class Test {

	public static void main(String[] args) {
		
		/**
		 * 两位顾客
		 */
		Person personA = new Person();
		personA.setName("zhangsan");
		personA.setIsShave(false);
		
		Person personB = new Person();
		personB.setName("lisi");
		personB.setIsShave(true);
		
		/**
		 * 一位理发师
		 */
		Barber barber = new Barber();
		barber.setName("barber");
		barber.setIsShave(false);
		
		/**
		 * 理发过程
		 */
		barber.shave(personA);
		barber.shave(personB);
		barber.shave(barber);
	}
}


 

  从程序的角度看,理发师为自己刮脸合理的,我们不应该说理发师如果给自己刮脸,自己就成为了给自己刮脸这类人,而与自己只给不给自己刮脸的人刮脸的理发原则,每个人都有给自己刮脸的权利,有的人不刮脸,有的人会自己刮脸,不刮脸的人会找理发师刮脸,这里我们可以理解为有两个对象,一个是客户,一个是理发师,理发师有给自己定下的原则,而在理发师给自己刮脸的过程中其实是他一个人担任了两种角色,即使客户也是理发师,从程序中可以看出,其实在执行的过程中并不会发生矛盾。

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux理发师问题是一个经典的操作系统调度问题,也被称为理发店问题。题目的主要场景是一个理发店,有n个理发师和m个等待理发的客人。当客人进入理发店时,如果有空闲的理发师,则客人会被指派给理发师理发,否则就会在等待区等待。当一个理发师完成一位客人的理发后,它会继续为下一个等待的客人服务。在这个问题中,我们需要设计一种合理的调度算法,使所有客人尽可能地得到服务,并且尽量减少等待时间。 一种常见的解决方案是使用队列的数据结构来实现调度。我们可以将每个理发师看作一个处理器,每个客人看作一个任务。当客人到来时,我们将其加入等待队列中。然后,我们可以使用一种调度算法(例如轮询、最短作业优先等)从队列中选择下一个任务,并将其分配给一个空闲的理发师处理。一旦任务完成,我们就将其从队列中删除,并将理发师标记为空闲状态,以便在下一个任务到来时使用。 我们还可以进一步改进这个算法,使其更加高效。例如,我们可以在等待队列中维护客人的等待时间,然后选择等待时间最长的任务优先执行,以减少等待时间。我们还可以使用并行处理技术,将任务划分为多个子任务,并将它们分配给不同的理发师处理,以提高处理速度。 总之,Linux理发师问题是一个实际的调度问题,需要结合实际场景和数据结构设计合理的调度算法,以提高效率和服务质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值