怎么理解锁是用来保护数据而不是保护代码的
时间:2011-07-13
来源:互联网
我在Lkd看到一句话:锁是用来保护数据而不是用来保护代码的。
临界区的概念是指:访问和操作共享数据的代码段。
为嘛不是锁住临界区而是锁住数据段。
有没有锁 锁住数据段的例子??
求那个助啊..
作者: app_3 发布时间: 2011-07-13
代码需要转换为一条条的指令,锁住数据才会保证数据的完整性和操作的原子性
作者: thefirstz 发布时间: 2011-07-13
看锁和临界区的实现就可以知道了,因为锁本质就是操作一整数,而临界区则是将所有的中断关闭。
作者: steven_miao 发布时间: 2011-07-13
举个例子:
在中断里调用add_list
static void add_list(void) {
spin_lock(&list_spin_lock);
list_add(&node->list, list_head);
spin_unlock(&list_spin_lock);
}
在线程里调用read_list
static void read_list(void) {
spin_lock(&list_spin_lock);
/* read list here */
spin_unlock(&list_spin_lock);
}
当线程在读list的时候中断来了,但是线程还没读完list,锁还没有被释放,所以这个时候中断还不能对list进行添加,这就起到保护list了,数据呢指的就是list,代码就是指你所编写的代码,所以锁是保护list数据的,不是保护你所写的代码的,
在中断里调用add_list
static void add_list(void) {
spin_lock(&list_spin_lock);
list_add(&node->list, list_head);
spin_unlock(&list_spin_lock);
}
在线程里调用read_list
static void read_list(void) {
spin_lock(&list_spin_lock);
/* read list here */
spin_unlock(&list_spin_lock);
}
当线程在读list的时候中断来了,但是线程还没读完list,锁还没有被释放,所以这个时候中断还不能对list进行添加,这就起到保护list了,数据呢指的就是list,代码就是指你所编写的代码,所以锁是保护list数据的,不是保护你所写的代码的,
作者: xingzengmou 发布时间: 2011-07-13
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28