Mutex 一根挂着锁的线能睡吗?
我对互斥体有疑问Mutex 一根挂着锁的线能睡吗?,mutex,Mutex,我对互斥体有疑问 Global mutex; /// more things Acquire lock on mutex; /// Do things here; Release lock; 如果线程获得了互斥锁(例如tbb互斥锁),处理器是否可以在保持锁的同时将其置于睡眠状态,稍后再唤醒以完成任务,或者当线程获得互斥锁时,它会继续不间断地工作,直到释放锁 是的,持有互斥锁的线程肯定可以进入睡眠状态,而且很可能会进入睡眠状态 如果您只有一个内核,那么在同一时刻只能运行一个线程。如果有10个线程
Global mutex;
/// more things
Acquire lock on mutex;
/// Do things here;
Release lock;
如果线程获得了互斥锁(例如tbb互斥锁),处理器是否可以在保持锁的同时将其置于睡眠状态,稍后再唤醒以完成任务,或者当线程获得互斥锁时,它会继续不间断地工作,直到释放锁 是的,持有互斥锁的线程肯定可以进入睡眠状态,而且很可能会进入睡眠状态 如果您只有一个内核,那么在同一时刻只能运行一个线程。如果有10个线程在一个内核上运行,那么9个线程在任何时候都将处于休眠状态
想象一下,如果一个带有互斥锁的线程不能进入睡眠状态,那么只有一个线程会运行,直到互斥锁被释放。每次取出互斥体时,您的进程基本上都会变成单线程,即使其他九个线程不关心互斥体所保护的内容。是的,持有互斥体的线程肯定会进入睡眠状态,并且可能会进入睡眠状态 如果您只有一个内核,那么在同一时刻只能运行一个线程。如果有10个线程在一个内核上运行,那么9个线程在任何时候都将处于休眠状态
想象一下,如果一个带有互斥锁的线程不能进入睡眠状态,那么只有一个线程会运行,直到互斥锁被释放。每次取出互斥锁时,您的进程基本上都会变成单线程,即使其他九个线程不关心互斥锁所保护的内容。谢谢您的回答。那么,当线程处于睡眠状态时,它是放弃了互斥锁还是一直保持着互斥锁?谢谢你的回答。因此,当线程进入睡眠状态时,它是放弃了对互斥锁的锁定还是一直保持着它?它可以由CPU进入睡眠状态,但决不能自己在互斥锁中手动进入睡眠状态。它意味着死锁。CPU可以让它休眠,但决不能让它自己在互斥锁中手动休眠。这意味着僵局。