线程同步构造

线程同步总体上分为两种构造:用户模式和内核模式。其中用户模式基于CPU指令,内核模式则基于操作系统内核对象。由于用户模式构造由硬件支持,且不发生用户-内核状态切换,因此效率较高。但线程使用基于用户模式的同步时,操作系统也无法捕捉到该线程上的阻塞。因此该线程在操作系统看来总是处于非阻塞状态,这意味着线程总是参与抢占时间片,导致线程无谓的浪费CPU时间。与之相对的是内核模式构造,线程使用操作系统提供的内核对象进行同步,每当进入同步块时,代码需要切换到内核态运行,导致巨大的性能损失。但优点是操作系统可以检测到等待同步对象的线程并将其阻塞,当同步对象可用时再唤醒线程。如果拥有“锁”的线程一直不释放,基于用户模式构造的等待线程将一直在CPU上无意义的运行,称之为“活锁”。基于内核模式构造的等待线程则一直被操作系统阻塞,称之为“死锁”。总体来说“死锁”优于“活锁”,因为前者不消耗CPU时间。

用户模式构造

CLR提供了两种

 评论




载入天数...载入时分秒...  |  总访问量为
Powered by Github and MarkdownPad 2

--------------------------- 别拉了,我是有底线的>_< ---------------------------