Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Multithreading 这句话是什么意思';当前线程在m';_Multithreading_Boost - Fatal编程技术网

Multithreading 这句话是什么意思';当前线程在m';

Multithreading 这句话是什么意思';当前线程在m';,multithreading,boost,Multithreading,Boost,有人能给我解释一下以下文本中的陈述(前提条件下)是什么意思,以及它在线程中的意义吗 此文本可在 pre(before)条件:在调用函数之前必须为true的条件 在这种情况下,可锁定对象“m”必须已经被当前线程锁定 这个特殊的构造函数所做的是采用锁。它从另一个所有者那里夺走了它的所有权。唯一锁定对象将在可锁定对象被销毁时解除锁定。预(前)条件:调用函数前必须为真的条件 在这种情况下,可锁定对象“m”必须已经被当前线程锁定 这个特殊的构造函数所做的是采用锁。它从另一个所有者那里夺走了它的所有权。唯一

有人能给我解释一下以下文本中的陈述(前提条件下)是什么意思,以及它在线程中的意义吗

此文本可在

pre(before)条件:在调用函数之前必须为true的条件

在这种情况下,可锁定对象“m”必须已经被当前线程锁定

这个特殊的构造函数所做的是采用锁。它从另一个所有者那里夺走了它的所有权。唯一锁定对象将在可锁定对象被销毁时解除锁定。

预(前)条件:调用函数前必须为真的条件

在这种情况下,可锁定对象“m”必须已经被当前线程锁定

这个特殊的构造函数所做的是采用锁。它从另一个所有者那里夺走了它的所有权。唯一锁定对象将在可锁定对象被销毁时解除锁定。

预(前)条件:调用函数前必须为真的条件

在这种情况下,可锁定对象“m”必须已经被当前线程锁定

这个特殊的构造函数所做的是采用锁。它从另一个所有者那里夺走了它的所有权。唯一锁定对象将在可锁定对象被销毁时解除锁定。

预(前)条件:调用函数前必须为真的条件

在这种情况下,可锁定对象“m”必须已经被当前线程锁定


这个特殊的构造函数所做的是采用锁。它从另一个所有者那里夺走了它的所有权。unique_lock对象将在可锁定对象被销毁时解除锁定。

您的问题实际上是关于Boost的“unique_lock()”的语义

这里有一个很好的解释:

目前最好的投票答案是好的,但它没有澄清我的想法 怀疑,直到我挖得更深一点,所以决定与 可能在同一条船上

首先,lock_-guard和unique_-lock都遵循RAII模式 最简单的用例是在施工和维护期间获得锁 在销毁过程中自动解锁。如果这是您的用例 这样,您就不需要独特的锁定和 锁护将更有效

两者之间的关键区别在于不需要唯一的锁实例 在锁定时始终拥有与其关联的互斥锁 拥有互斥锁。这意味着unique_锁需要额外的 指示它是否拥有锁和其他额外方法的标志 “owns_lock()”来检查这一点。知道了这一点,我们可以解释所有额外的问题 该标志带来的好处是额外数据的开销 设置并检查-

1) 锁不必在构造时正确使用,您可以在构造期间传递标志std::defer_Lock以保持互斥锁 在施工期间解锁

2) 我们可以在函数结束之前解锁它,而不必等待析构函数释放它,这很方便

3) 您可以通过函数传递锁的所有权,它是可移动的,不可复制的

4) 它可以与条件变量一起使用,因为这需要锁定互斥体、检查条件并在等待 条件


您的问题实际上是关于Boost的“unique_lock()”的语义

这里有一个很好的解释:

目前最好的投票答案是好的,但它没有澄清我的想法 怀疑,直到我挖得更深一点,所以决定与 可能在同一条船上

首先,lock_-guard和unique_-lock都遵循RAII模式 最简单的用例是在施工和维护期间获得锁 在销毁过程中自动解锁。如果这是您的用例 这样,您就不需要独特的锁定和 锁护将更有效

两者之间的关键区别在于不需要唯一的锁实例 在锁定时始终拥有与其关联的互斥锁 拥有互斥锁。这意味着unique_锁需要额外的 指示它是否拥有锁和其他额外方法的标志 “owns_lock()”来检查这一点。知道了这一点,我们可以解释所有额外的问题 该标志带来的好处是额外数据的开销 设置并检查-

1) 锁不必在构造时正确使用,您可以在构造期间传递标志std::defer_Lock以保持互斥锁 在施工期间解锁

2) 我们可以在函数结束之前解锁它,而不必等待析构函数释放它,这很方便

3) 您可以通过函数传递锁的所有权,它是可移动的,不可复制的

4) 它可以与条件变量一起使用,因为这需要锁定互斥体、检查条件并在等待 条件


您的问题实际上是关于Boost的“unique_lock()”的语义

这里有一个很好的解释:

目前最好的投票答案是好的,但它没有澄清我的想法 怀疑,直到我挖得更深一点,所以决定与 可能在同一条船上

首先,lock_-guard和unique_-lock都遵循RAII模式 最简单的用例是在施工和维护期间获得锁 在销毁过程中自动解锁。如果这是您的用例 这样,您就不需要独特的锁定和 锁护将更有效

两者之间的关键区别在于不需要唯一的锁实例 在锁定时始终拥有与其关联的互斥锁 拥有互斥锁。这意味着unique_锁需要额外的 指示它是否拥有锁和其他额外方法的标志 “owns_lock()”来检查这一点。知道了这一点,我们可以解释
unique_lock(Lockable & m,boost::adopt_lock_t)


Precondition:
**The current thread owns an exclusive lock on m.**

Effects:
**Stores a reference to m. Takes ownership of the lock state of m.**

Postcondition:
owns_lock() returns true. mutex() returns &m.

Throws:
Nothing.