C++ 中的同步与互斥 (recursive_mutex,timed_mutex,recursive_timed_mutex, wait_until() , etc

来源:互联网 发布:ubuntu登录密码忘记了 编辑:程序博客网 时间:2024/06/11 21:22


C++ 中的同步与互斥 (recursive_mutex,timed_mutex, recursive_timed_mutex, wait_until() , etc


void func(int i, double d, const std::string& s){//go to work}int main(){   std::thread t(func, 1, 12.50, "sample");}//尽管可以向线程函数传递任意数量的参数,但是所有的参数应当按值传递。如果需要将参数按引用传递,那要向下例所示那样,必须将参数用std::ref 或者std::cref进行封装。

std::ref(a)


除了join方法外,该线程类还提供了另外两个方法:
swap:交换两个线程对象的底层句柄。

Detach: 允许执行该方法的线程脱离其线程对象而继续独立执行。脱离后的线程不再是可结合线程(你不能等待它们执行结束)。


如果主线程比工作线程更早结束,输出结果将如下......


condition_variable:要求任何在等待该条件变量的线程必须先获取std::unique_lock锁。

至少有一个线程发送信号使某个条件变为true。可以使用notify_one()来发送信号,同时唤醒一个正在等待该条件收到信号的处于阻塞状态的线程,或者用notify_all()来唤醒在等待该条件的所有线程。

在多处理器系统中,因为一些复杂情况,要想完全预测到条件被唤醒并不容易,还会出现虚假唤醒的情况。就是说,在没人给条件变量发送信号的情况下,线程也可能会被唤醒。所以线程被唤醒后,还需要检测条件是否为true。因为可能会多次发生虚假唤醒,所以需要进行循环检测。



0 0
原创粉丝点击