您的位置:首页 > 编程语言 > C语言/C++

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

2016-11-03 10:01 471 查看
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。因为可能会多次发生虚假唤醒,所以需要进行循环检测。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  timed_mutex