Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.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
C++ 为什么要调用boost::thread::shared\u互斥体块的lock\u upgrade()?_C++_Boost Thread - Fatal编程技术网

C++ 为什么要调用boost::thread::shared\u互斥体块的lock\u upgrade()?

C++ 为什么要调用boost::thread::shared\u互斥体块的lock\u upgrade()?,c++,boost-thread,C++,Boost Thread,我正在学习关于boost::thread的手册,他们说调用shared\u mutex的lock\u upgrade()的效果是 “当前线程阻塞,直到可以获得当前线程的升级所有权。” 但为什么它要阻止,因为升级所有权它还不是独占所有权 多谢各位 但为什么它要阻止,因为升级所有权它还不是独占所有权 如果某人已经拥有独占所有权,那么没有人可以获得共享或可升级的所有权;因此,在这种情况下,lock\u shared和lock\u upgrade都会阻塞 并且,如注释中所述,只有一个线程可以具有可升级的

我正在学习关于boost::thread的手册,他们说调用shared\u mutex的lock\u upgrade()的效果是 “当前线程阻塞,直到可以获得当前线程的升级所有权。”

但为什么它要阻止,因为升级所有权它还不是独占所有权

多谢各位

但为什么它要阻止,因为升级所有权它还不是独占所有权

如果某人已经拥有独占所有权,那么没有人可以获得共享或可升级的所有权;因此,在这种情况下,
lock\u shared
lock\u upgrade
都会阻塞


并且,如注释中所述,只有一个线程可以具有可升级的所有权;因此,
lock\u upgrade
如果有人已经拥有该功能,也会阻止升级。

您是正确的,另外,一次只允许一个线程获得可升级的所有权。如果另一个线程获得了可升级的所有权,那么对
lock\u upgrade
的调用将被阻止。@DaveS:谢谢,我不知道这个细节。