std::unique_lock::lock
De cppreference.com
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
<metanoindex/>
<tbody> </tbody> void lock(); |
(desde C++11) | |
Bloqueia o mutex associado. Efetivamente chama
mutex()->lock().Original:
Locks the associated mutex. Effectively calls
mutex()->lock().The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
std::system_error é lançada se não houver mutex associado, ou se o mutex já está trancada.
Original:
std::system_error is thrown if there is no associated mutex or if the mutex is already locked.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Parâmetros
(Nenhum)
Original:
(none)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Valor de retorno
(Nenhum)
Original:
(none)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Exceções
- Todas as exceções lançadas por
mutex()->lock()Original:Any exceptions thrown bymutex()->lock()The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- Se não houver um mutex associado, std::system_error com um código de erro de std::errc::operation_not_permittedOriginal:If there is no associated mutex, std::system_error with an error code of std::errc::operation_not_permittedThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- Se o mutex já está bloqueado std::system_error, com um código de erro de std::errc::resource_deadlock_would_occurOriginal:If the mutex is already locked, std::system_error with an error code of std::errc::resource_deadlock_would_occurThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Exemplo
O exemplo a seguir usa
lock para re-adquirir um mutex que foi desbloqueado .
Original:
The following example uses
lock to re-acquire a mutex that was unlocked.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <mutex>
#include <thread>
#include <iostream>
#include <vector>
#include <chrono>
int main()
{
int counter = 0;
std::mutex counter_mutex;
std::vector<std::thread> threads;
auto worker_task = [&](int id) {
std::unique_lock<std::mutex> lock(counter_mutex);
++counter;
std::cout << id << ", initial counter: " << counter << '\n';
lock.unlock();
// don't hold the lock while we simulate an expensive operation
std::this_thread::sleep_for(std::chrono::seconds(1));
lock.lock();
++counter;
std::cout << id << ", final counter: " << counter << '\n';
};
for (int i = 0; i < 10; ++i) threads.emplace_back(worker_task, i);
for (auto &thread : threads) thread.join();
}
Potencial saída:
0, initial counter: 1
1, initial counter: 2
2, initial counter: 3
3, initial counter: 4
4, initial counter: 5
5, initial counter: 6
6, initial counter: 7
7, initial counter: 8
8, initial counter: 9
9, initial counter: 10
6, final counter: 11
3, final counter: 12
4, final counter: 13
2, final counter: 14
5, final counter: 15
0, final counter: 16
1, final counter: 17
7, final counter: 18
9, final counter: 19
8, final counter: 20
Veja também
tenta bloquear o mutex associado, retorna se o mutex não está disponível Original: tries to lock the associated mutex, returns if the mutex is not available The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (função pública membro) | |
destrave o mutex associado Original: unlocks the associated mutex The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (função pública membro) | |