std::lock

来自cppreference.com
< cpp‎ | thread

 
 
线程的支持库

|- class="t-nv-h1"

| colspan="5" |
主题
原文:
Threads
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

|-

| |- |

thread(C++11)
this_thread命名空间
原文:
this_thread namespace
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
get_id(C++11)
yield(C++11)

|

sleep_for(C++11)
sleep_until(C++11)

|-

|- class="t-nv-h1"

| colspan="5" |
相互排斥
原文:
Mutual exclusion
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

|- | |- |

mutex(C++11)
timed_mutex(C++11)

|

recursive_mutex(C++11)
recursive_timed_mutex(C++11)

|-

通用锁管理
原文:
Generic lock management
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

| |- |

lock_guard(C++11)
unique_lock(C++11)
defer_lock_t
try_to_lock_t
adopt_lock_t
(C++11)
(C++11)
(C++11)

|

lock(C++11)
try_lock(C++11)
defer_lock
try_to_lock
adopt_lock
(C++11)
(C++11)
(C++11)

|- class="t-nv-h1"

| colspan="5" |
条件变量
原文:
Condition variables
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

|-

condition_variable(C++11)
condition_variable_any(C++11)
notify_all_at_thread_exit(C++11)
cv_status(C++11)

|- class="t-nv-h1"

| colspan="5" |
期货
原文:
Futures
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

|- | |- |

promise(C++11)
future(C++11)
shared_future(C++11)
packaged_task(C++11)
async(C++11)

|

launch(C++11)
future_status(C++11)
future_error(C++11)
future_category(C++11)
future_errc(C++11)

|-

 
在头文件 <mutex> 中定义
template< class Lockable1, class Lockable2, class LockableN... >
void lock( Lockable1& lock1, Lockable2& lock2, LockableN& lockn... );
(since C++11)
。 锁定给定的Lockable对象lock1lock2...lockn使用,以避免死锁的避免死锁的算法.
原文:
Locks the given Lockable objects lock1, lock2, ..., lockn using a deadlock avoidance algorithm to avoid deadlock.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
。锁定对象未指定的调用locktry_lockunlock。如果lockunlock,将引发异常,unlock被称为任何被锁定的对象,然后重新抛出.
原文:
The objects are locked by an unspecified series of calls to lock, try_lock, unlock. If a call to lock or unlock results in an exception, unlock is called for any locked objects before rethrowing.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 。参数。

lock1, lock2, ... , lockn -
Lockable对象锁定。
原文:
the Lockable objects to lock
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

===。 返回值。===

。 (无)。
原文:
(none)
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 。为例。

。下面的示例使用std::lock对互斥对象锁定无死锁.
原文:
The following example uses std::lock to lock pairs of mutexes without deadlock.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

#include <mutex>
#include <thread>
#include <iostream>
#include <vector>
#include <functional>
#include <chrono>
 
struct Employee {
    Employee(int id) : id(id) {}
    int id;
    std::vector<int> lunch_partners;
    std::mutex m;
};
 
void send_mail(Employee &e1, Employee &e2)
{
    // simulate a time-consuming messaging operation
    std::this_thread::sleep_for(std::chrono::seconds(1));
}
 
void assign_lunch_partner(Employee &e1, Employee &e2)
{
    // use std::lock to acquire two locks without worrying about 
    // other calls to assign_lunch_partner deadlocking us
    std::lock(e1.m, e2.m);
 
    e1.lunch_partners.push_back(e2.id);
    e2.lunch_partners.push_back(e1.id);
 
    e1.m.unlock();
    e2.m.unlock();
 
    send_mail(e1, e2);
    send_mail(e2, e1);
}
 
int main()
{
    Employee alice(0), bob(1), christina(2), dave(3);
 
    // assign in parallel threads because mailing users about lunch assignments
    // takes a long time
    std::vector<std::thread> threads;
    threads.emplace_back(assign_lunch_partner, std::ref(alice), std::ref(bob));
    threads.emplace_back(assign_lunch_partner, std::ref(christina), std::ref(bob));
    threads.emplace_back(assign_lunch_partner, std::ref(christina), std::ref(alice));
    threads.emplace_back(assign_lunch_partner, std::ref(dave), std::ref(bob));
 
    for (auto &thread : threads) thread.join();
}


[编辑] 。另请参阅。

(C++11)
通过重复调用try_lock来尝试获得互斥体的所有权
原文:
attempts to obtain ownership of mutexes via repeated calls to try_lock
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

(函数模板) [edit]