std::mutex:: try_lock
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Locking | ||||
|
mutex::try_lock
|
||||
| Native handle | ||||
|
bool
try_lock
(
)
;
|
(自 C++11 起) | |
尝试锁定互斥量。立即返回。成功获取锁时返回 true ,否则返回 false 。
此函数允许伪失败,即使互斥锁当前未被任何其他线程锁定,也可能返回 false 。
如果已拥有
mutex
的线程调用
try_lock
,其行为是未定义的。
同一互斥锁上先前的 unlock() 操作会与此操作形成 同步关系 (定义参见 std::memory_order ),若本操作返回 true 。请注意,若本操作返回 false ,则先前的 lock() 操作不会与此操作形成同步关系。
目录 |
参数
(无)
返回值
true 表示锁获取成功,否则为 false 。
异常
不抛出任何异常。
示例
#include <chrono> #include <iostream> // std::cout #include <mutex> #include <thread> std::chrono::milliseconds interval(100); std::mutex mutex; int job_shared = 0; // 两个线程均可修改 'job_shared', // mutex 将保护此变量 int job_exclusive = 0; // 仅有一个线程可修改 'job_exclusive' // 无需保护 // 此线程可修改 'job_shared' 和 'job_exclusive' void job_1() { std::this_thread::sleep_for(interval); // 让 'job_2' 先获取锁 while (true) { // 尝试锁定 mutex 以修改 'job_shared' if (mutex.try_lock()) { std::cout << "job shared (" << job_shared << ")\n"; mutex.unlock(); return; } else { // 无法获取锁来修改 'job_shared' // 但还有其他工作要做 ++job_exclusive; std::cout << "job exclusive (" << job_exclusive << ")\n"; std::this_thread::sleep_for(interval); } } } // 此线程仅可修改 'job_shared' void job_2() { mutex.lock(); std::this_thread::sleep_for(5 * interval); ++job_shared; mutex.unlock(); } int main() { std::thread thread_1(job_1); std::thread thread_2(job_2); thread_1.join(); thread_2.join(); }
可能的输出:
job exclusive (1) job exclusive (2) job exclusive (3) job exclusive (4) job shared (1)
参见
|
锁定互斥锁,若互斥锁不可用则阻塞
(公开成员函数) |
|
|
解锁互斥锁
(公开成员函数) |
|
|
C 文档
关于
mtx_trylock
|
|