首页 > 试题广场 > 下列不属于linux内核锁的一项是()
[单选题]
下列不属于linux内核锁的一项是()
  • Semaphore
  • Spinlock
  • seqlock
  • Message
spin_lock(自旋锁):是Linux内核中最基础的锁机制。自旋锁不会引起调用者休眠,如果自旋锁已经呗其他的执行单元持有,调用者就会一直循环等在该自旋锁的持有者是否已经释放了锁。自旋锁适用于锁的持有者保持锁的时间比较段的情形。
读写自旋锁(__RW_LOCK_UNLOCKED:也就是没有读,没有写的请求时,读者可以获得读写锁。在读写锁没有写者的时候,读者获得器自旋锁。
seq_lock(顺序锁):是对读写锁的优化。也就是写锁不被读锁所阻塞。写者写的同时,读者可以读。
semaphore(信号量):信号量和自旋锁的区别时信号量会引起调用者的休眠。
RCU(读-拷贝):在访问RCU保护的资源时,读者不需要任何等待,而写者访问它时首先得拷贝一个副本,然后对父辈修改,最后在没有任何对读者操作gai'zi'yuan把指向原来的数据的指针指向新的数据,


编辑于 2020-03-30 18:02:37 回复(0)
A 未知 B 和 C有lock 都是锁 先排除 D 消息 跟内核没关系,就它,哈哈
发表于 2019-10-02 09:32:25 回复(1)
Linux的内核锁主要是自旋锁、顺序锁和信号量。
  • 自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。
  • spin_lock自旋锁对于临界区是不做区分的,而读写锁是对临界区做读写区分,并且度进程进入临界区的几率比较大,因为写进程进入时需要等待读进程退出临界区。而有没有一种方法,可以保护写进程的优先权,使得写进程可以更快的获得锁? 答案是有的,就是顺序锁。顺序锁的设计思想是:对某一个共享数据读取的时候不加锁,写的时候加锁。同时为了保证读取的过程中因为写进程修改了共享区的数据,导致读进程读取数据错误。在读取者和写入者之间引入了一个整形变量sequence,读取者在读取之前读取sequence, 读取之后再次读取此值,如果不相同,则说明本次读取操作过程中数据发生了更新,需要重新读取。而对于写进程在写入数据的时候就需要更新sequence的值。
  • Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务(优先级最高的任务)将被唤醒,从而便可以获得这个信号量。信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。
发表于 2020-04-06 11:16:06 回复(0)
spin_lock(自旋锁):是Linux内核中最基础的锁机制。自旋锁不会引起调用者休眠,如果自旋锁已经呗其他的执行单元持有,调用者就会一直循环等在该自旋锁的持有者是否已经释放了锁。自旋锁适用于锁的持有者保持锁的时间比较段的情形。
读写自旋锁(__RW_LOCK_UNLOCKED:也就是没有读,没有写的请求时,读者可以获得读写锁。在读写锁没有写者的时候,读者获得器自旋锁。
seq_lock(顺序锁):是对读写锁的优化。也就是写锁不被读锁所阻塞。写者写的同时,读者可以读。
semaphore(信号量):信号量和自旋锁的区别时信号量会引起调用者的休眠。
RCU(读-拷贝):在访问RCU保护的资源时,读者不需要任何等待,而写者访问它时首先得拷贝一个副本,然后对父辈修改,最后在没有任何对读者操作gai'zi'yuan把指向原来的数据的指针指向新的数据,


发表于 2020-06-09 15:10:01 回复(0)
d
发表于 2019-10-04 20:37:57 回复(0)