豫ICP备17040950号-2

操作系统中锁的原理

  • 概述

    为了保证数据的一致性,在多线程编程中我们会用到锁,使得在某一时间点,只有一个线程进入临界区代码。虽然不同的语言可能会提供不同的锁接口,但是底层调用的都是操作系统的提供的锁,不同的高级语言只是在操作系统的锁机制基础上进行了些封装而已,要真正理解锁,还是得看操作系统是怎么实现锁的。

  • 锁的本质

    所谓的锁,本质上只是内存中的一个整形数,不同的数值表示不同的状态,比如1表示空闲状态和加锁状态。加锁时,判断锁是否空闲,如果空闲,修改为加锁状态,返回成功,如果已经上锁,返回失败,解锁时,就把锁状态修改为空闲状态。        加锁和解锁看起来都很简单,但是os是怎么保证锁操作本身的原子性呢? 在多核环境中,两个核上的代码同时申请一个锁,两个核同时读取锁变量,同时判断锁是空闲的,再各自修改锁变量为上锁状态,都返回成功,这样两个核同时获取到了锁, 这种情况可能吗? 当然是不可能的,那么os是通过什么手段来保证锁操作本身的原子性的呢?我们可以把上锁的过程具体表示为:

程序员的浪漫-浏览器控制台输出炫丽色彩

大家有没有注意到在有些网站中,当我们打开F12的时候,里边会有console内容,这些内容还是有样式的,如果之前没有见到过,你可以打开百度首页,按下F12,里边会有百度的招聘信息,或者打开京东首页、知乎首页,都会看到一些个性的招聘信息,我们自己写的console.log(),在浏览器中是没有样式的,这是怎么做到的呢?

其实浏览器js中的console是可以自定义样式的,可以显示缤纷的颜色,甚至图片。你想到的差不多都可以实现!

用法示例:

%c 代表之后的文本会使用第二个参数给定的css样式来格式化

1
console.log("%c一些文本 ", "css 代码");

展示效果:

jsbasicconsoleskill0101.png

你的网站带www还是不带www

网站的域名带www的和不带www的有什么区别,可能很多人都不是太清楚,包括一些工作几年的一线编程人员。
可能很多人都说应该没啥区别吧,在浏览器输入哪个都可以,不带www的输入更快更简单,也能访问。实际呢,在国内的用户习惯确实提起某个网站或者使用某个网站都会带上www。但是带www的网站其实是域名的二级域名不带www的才是顶级域名。在国内潜规则是基本所有的网站都会把带www的二级域名和不带www的顶级域名都指向到同一个网站。这样适配了国内用户习惯,同时也造成好像两者没区别似的。

只做技术的程序员后来都怎么样了?值得深思

程序员到底要不要一辈子只做技术?你的职业规划和人生愿景是怎样的?接下来的内容有多次引发过争论。你有什么想法可以留言。

“软件测试发展前景好,以后可以往管理层方向发展,如果你不想做管理层,就一心钻研技术,一辈子靠技术生存,将来也能站稳脚跟。”
这句话是不是很耳熟?但事实上只埋头苦干做技术并非是件好事。
1.jpg