Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mutex 一根挂着锁的线能睡吗?_Mutex - Fatal编程技术网

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可以让它休眠,但决不能让它自己在互斥锁中手动休眠。这意味着僵局。