include: co/co.h.
#co::mutex
从 v3.0.1 开始,co::mutex
可以在协程与非协程中使用。
#constructor
1. mutex();
2. mutex(mutex&& m);
3. mutex(const mutex& m);
- 1, 默认构造函数。
- 2, 移动构造函数。
- 3, 拷贝构造函数,仅将内部引用计数加 1。
#lock
void lock() const;
- 获取锁,阻塞直到获得锁为止。
#try_lock
bool try_lock() const;
- 获取锁,不会阻塞,成功获取锁时返回 true,否则返回 false。
#unlock
void unlock() const;
- 释放锁,一般由之前获得锁的协程或线程调用。
#co::mutex_guard
#constructor
explicit mutex_guard(co::mutex& m);
explicit mutex_guard(co::mutex* m);
- 构造函数,调用
m.lock()
获取锁,参数m
是co::mutex
类的引用或指针。
#destructor
~mutex_guard();
- 析构函数,释放构造函数中获得的锁。
#代码示例
#include "co/co.h"
#include "co/cout.h"
co::mutex g_m;
int g_v = 0;
void f() {
co::mutex_guard g(g_m);
++g_v;
}
int main(int argc, char** argv) {
flag::parse(argc, argv);
go(f);
go(f);
f();
f();
co::sleep(100);
co::print("g_v: ", g_v);
return 0;
}