+ -
当前位置:首页 → 问答吧 → 怎么理解锁是用来保护数据而不是保护代码的

怎么理解锁是用来保护数据而不是保护代码的

时间: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数据的,不是保护你所写的代码的,

作者: xingzengmou   发布时间: 2011-07-13