
并发编程
文章平均质量分 86
YAFree123
这个作者很懒,什么都没留下…
展开
-
并发编程(三):互斥
而当自旋失败,才会请求系统调用,让操作系统帮助,达到自旋的效果(会有各种优化),所以对于用户态程序来说,mutex在多竞争场景下,不会同上面实现的自旋锁那样,有巨大的性能损失。且在用户态实现的自旋锁,是不完备的,因为用户态无法关中断,即,如果lock后,触发了中断,中断处理程序中,也需要lock,可能会导致死锁等各种问题。自旋锁的一个弊端是,除了进入临界区的那个线程,其他处理器上的线程都在空转(自旋),所以争抢的处理器越多,其利用率越低。上述是使用C++提供的标准api,实现的简易自旋锁。原创 2024-04-04 17:39:30 · 899 阅读 · 0 评论 -
并发编程(二):线程安全检查工具
对于验证代码是否是线程安全,往往是十分困难的,有一些工具可以帮我们简化这项任务,以尽可能保证并发的正确性。原创 2024-04-04 14:49:24 · 1877 阅读 · 0 评论 -
并发编程(一)多线程存在的问题
考虑上述代码,在单线程下,程序执行正常,但是在并发环境中,对sum的++就会出现意想不到的结果,sum的和不是10000000。更近一步,因为sum++ 在汇编层面不是一条指令,那么强制使用一条指令来进行sum++呢?会发现,依旧不会得到正确的sum。当两个线程在一个cpu核中进行调度,上面的代码会得到正确的值,因为asm volatile( “incq %0” : “+m”(sum));只是一条指令,每次对sum的操作都是原子的。但是,原创 2024-04-03 22:47:03 · 734 阅读 · 0 评论