• 24.1、你知道哪几种线程锁(POSIX)?


    互斥锁(mutex)

    互斥锁属于sleep-waiting类型的锁。例如在一个双核的机器上有两个线程A和B,它们分别运行在core 0和core 1上。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被 线程B所持有,那么线程A就会被阻塞,此时会通过上下文切换将线程A置于等待队列中,此时core 0 就可以运行其他的任务(如线程C)。

    条件变量(cond)

    自旋锁(spin)

    自旋锁属于busy-waiting类型的锁,如果线程A是使用pthread_spin_lock操作去请求锁,如果自旋锁已 经被线程B所持有,那么线程A就会一直在core 0上进行忙等待并不停的进行锁请求,检查该自旋锁是 否已经被线程B释放,直到得到这个锁为止。因为自旋锁不会引起调用者睡眠,所以自旋锁的效率远 高于互斥锁。

    虽然它的效率比互斥锁高,但是它也有些不足之处:

    自旋锁一直占用CPU,在未获得锁的情况下,一直进行自旋,所以占用着CPU,如果不能在很短的 时间内获得锁,无疑会使CPU效率降低。

    在用自旋锁时有可能造成死锁,当递归调用时有可能造成死锁。

    自旋锁只有在内核可抢占式或SMP的情况下才真正需要,在单CPU且不可抢占式的内核下,自旋锁的 操作为空操作。自旋锁适用于锁使用者保持锁时间比较短的情况下。

  • 相关阅读:
    C++ version the delaunay triangulation
    Jason Saragih's Homepage
    asm/aam links
    自动白平衡算法效果图
    What algorithm to use to normalize someone's face on image
    神奇的图像处理算法
    计算机视觉牛人博客和代码汇总
    雅虎开源色情图片检测神经网络
    蚁群算法
    时间序列分析
  • 原文地址:https://www.cnblogs.com/crbhf/p/15138095.html
Copyright © 2020-2023  润新知