首页 > 试题广场 >

下面线程间的通讯机制中,关键路径上不会产生系统调用从而减少用

[单选题]
下面线程间的通讯机制中,关键路径上不会产生系统调用从而减少用户态到内核态的上下文切换的是____。
  • pthread_spin_lock
  • pthread_mutex
  • 信号量
  • pthread_rwlock
  • 管道
  • 消息队列
谁能解释解释这道题是在问什么
发表于 2018-08-20 20:46:17 回复(1)
自旋锁的应用。当一个进程获取资源后,其他进程进入忙等待。
发表于 2016-07-26 09:40:47 回复(0)

1,  spinlock 介绍

spinlock又称自旋锁,线程通过busy-wait-loop的方式来获取锁,任时刻只有一个线程能够获得锁,其他线程忙等待直到获得锁。spinlock在多处理器多线程环境的场景中有很广泛的使用,一般要求使用spinlock的临界区尽量简短,这样获取的锁可以尽快释放,以满足其他忙等的线程。Spinlock和mutex不同,spinlock不会导致线程的状态切换(用户态->内核态),但是spinlock使用不当(如临界区执行时间过长)会导致cpu busy飙高。

2 ,使用准则

Spinlock使用准则:临界区尽量简短,控制在100行代码以内,不要有显式或者隐式的系统调用,调用的函数也尽量简短。例如,不要在临界区中调用read,write,open等会产生系统调用的函数,也不要去sleep;strcpy,memcpy等函数慎用,依赖于数据的大小。

发表于 2015-09-04 14:18:51 回复(0)
pthread_spin_lock 自旋锁,在进入阻塞队列之前先跑几个循环,然后再去尝试获取锁,直到自旋的次数超过阈值,才进入阻塞队列,此时才切换状态
编辑于 2015-08-27 03:08:44 回复(2)
优缺点比较

spinlock不会使线程状态发生切换,mutex在获取不到锁的时候会选择sleep。

mutex获取锁分为两阶段,第一阶段在用户态采用spinlock锁总线的方式获取一次锁,如果成功立即返回;否则进入第二阶段,调用系统的futex锁去sleep,当锁可用后被唤醒,继续竞争锁。

Spinlock优点:没有昂贵的系统调用,一直处于用户态,执行速度快。

Spinlock缺点:一直占用cpu,而且在执行过程中还会锁bus总线,锁总线时其他处理器不能使用总线。

Mutex优点:不会忙等,得不到锁会sleep。

Mutex缺点:sleep时会陷入到内核态,需要昂贵的系统调用。

发表于 2016-07-29 14:56:32 回复(0)
自旋锁没有满足进程同步中的让权等待原则
发表于 2022-03-03 15:11:17 回复(0)
自旋锁不产生用户态到核心态切换
发表于 2021-12-24 15:06:05 回复(0)

1,  spinlock 介绍

spinlock又称自旋锁,线程通过busy-wait-loop的方式来获取锁,任时刻只有一个线程能够获得锁,其他线程忙等待直到获得锁。 spinlock在多处理器多线程环境的场景中有很广泛的使用,一般要求使用spinlock的临界区尽量简短,这样获取的锁可以尽快释放,以满足其他忙 等的线程。Spinlock和mutex不同,spinlock不会导致线程的状态切换(用户态->内核态),但是spinlock使用不当(如临 界区执行时间过长)会导致cpu busy飙高。

2 ,使用准则

Spinlock使用准则:临界区尽量简短,控制在100行代码以内,不要有显式或者隐式的系统调用,调用的函数也尽量简短。例如,不要在临界区中调用 read,write,open等会产生系统调用的函数,也不要去sleep;strcpy,memcpy等函数慎用,依赖于数据的大小。

发表于 2017-04-20 09:14:14 回复(0)