互斥元与条件变量

互斥元:

C++提供了std::mutex;调用lock()来锁定;调用unlock()解锁。

作为替代,提供了身体都std::lock_guard类模板,实现互斥元的RAII管用语法,在构造时锁定互斥元,在析构时将互斥元解锁。

std::unique_lock比std::lock_guard提供了更多的灵活性。

数据竞争:

C++标准库提供了std::once_flag 和std::call_once来处理这种情况~!

std::shared_ptr <some_resource> resource_ptr;
std::once_flag resource_flag;
void init_resource()
{
    resource_ptr.reset(new some_resource);
}

void foo()
{
    std::once_call(resource_flag, int_resource);
    resource_ptr->do_something()
}

条件变量

C++ <condition_variable>提供两个条件变量: std::condition_variable 和std::condition_variable_any。

std::condition_variable仅限于和std::mutex一起工作。

std::condition_variable_any可以与符合成为类似互斥元的最低标准的任何东西一起工作。

wait()、wait_for() 等待条件。

使用future等待一次性事件;如果等待线程只打算等待一次,那么当条件为true时他就不会在等待这个条件变量,条件变量未必时同步机制的最佳选择。

future为一行事件建模。如果一个线程需要等待特定的一次性事件,那么他就会获取一个future来代表这一事件。

std::async来启动一个异步任务,std::async返回一个std::future对象; std::future对象最终将持有函数的返回值,执行get(), 线程就会阻塞直到future就绪,然后返回该值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值