java吧 关注:1,302,532贴子:12,854,250
  • 23回复贴,共1

关于多线程同步的问题

只看楼主收藏回复

多核CPU的情况下貌似是可以实现真正意义上的多线程并行,那两个线程在同一时刻同时加锁,会不会两个线程同时获得一把锁,单核情况下是因为在一个时间点只有一个线程运行,所以一把锁不可能被两个线程获得,那多核情况下呢?求大神解释


IP属地:浙江来自iPhone客户端1楼2013-10-29 09:00回复
    @windsun_ul


    IP属地:浙江来自iPhone客户端2楼2013-10-29 09:05
    回复
      2026-05-09 12:01:29
      广告
      不感兴趣
      开通SVIP免广告
      @╱―★神★―╲
      大神I


      IP属地:浙江3楼2013-10-29 09:26
      收起回复
        多核。。。。
        两个同时拿到一个锁,确实有可能啊。。。。
        顶贴等人。。。。


        4楼2013-10-29 09:28
        收起回复
          你说的是。。。并行还是并发?


          IP属地:四川5楼2013-10-29 11:28
          收起回复
            还是帮顶一下,多核编程没概念。


            IP属地:江苏7楼2013-10-29 12:51
            回复
              似乎找到了答案,加锁操作的本质 就是对内存一个变量的读取和设置,比如这个变量原本是0,加锁把他设为1,其他线程读取的时候发现是1,就只能等待,在单核情况下,能保证这把锁不能同时被两个线程获得,因为读取和设置是计算机硬件提供的一个指令:test_set(相当于原子操作,但实际上是两步,先读取再设置,但因为是一个指令,所以不会中断,这样就能保证锁只被一个线程获得),这就是自旋锁,但在多核情况下,简单的test和set是无法保证一把锁不被两个线程获得,因为多核可以实现真正意义上的并行,两个核同时test发现锁的值为0,然后同时set 1 这样加锁操作就失败了,所以在多核情况下在加锁操作之前,操作系统会调用一个计算机硬件提供的指令---锁内存总线(bus-locking),一旦某个核锁住了总线(有点疑问,当两个核同时锁总线呢··?可能这个操作是原子性的,不可能在精确的同一时刻同时执行),其他核也无法读取内存,所以可以保证test_set是一个真正的原子操作。I


              IP属地:浙江8楼2013-10-29 13:04
              收起回复
                没玩过多核编程,应该是操作系统自动会优化处理吧


                来自iPhone客户端10楼2013-10-29 13:59
                收起回复
                  2026-05-09 11:55:29
                  广告
                  不感兴趣
                  开通SVIP免广告
                  线程的运作博大精深。。。不懂。。


                  IP属地:广东11楼2013-10-29 22:30
                  回复
                    技术贴,帮顶


                    IP属地:福建12楼2013-10-29 23:19
                    收起回复
                      支持技术贴


                      13楼2013-10-30 00:01
                      回复
                        --谦恭、正直、怜悯、英勇、公正、牺牲、荣誉、灵魂!


                        IP属地:上海来自Android客户端14楼2013-10-30 08:17
                        回复


                          IP属地:四川来自Android客户端15楼2013-10-30 08:25
                          回复
                            lz想的太多了


                            IP属地:吉林16楼2013-10-30 08:55
                            回复